diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index e95a574..bb5a6f5 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -15,6 +15,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) @EnableScheduling @EnableAsync +@MapperScan("com.**.mapper") public class RuoYiApplication { public static void main(String[] args) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/controller/ScreenController.java b/ruoyi-admin/src/main/java/com/ruoyi/api/controller/ScreenController.java index e8e8d15..94131ba 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/controller/ScreenController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/controller/ScreenController.java @@ -39,25 +39,29 @@ public class ScreenController extends BaseController { // 静态初始化输送机编号数组 static { - // 1区域输送机编号 + // 区域输送机编号 AREA_SSJ_CODES.put(1, Arrays.asList( - "L2007", "L2008", "L2005", "L2006", "L2013" - )); - - // 2区域输送机编号 - AREA_SSJ_CODES.put(2, Arrays.asList( - "L2003", "L2004", "L2012", "L2001", "L2002" - )); - - // 3区域输送机编号 - AREA_SSJ_CODES.put(3, Arrays.asList( - "L1001", "L1002", "L1011" - )); - - // 4区域输送机编号 - AREA_SSJ_CODES.put(4, Arrays.asList( - "L1003", "L1004", "L1012" + "L1001", "G1004" )); +// // 1区域输送机编号 +// AREA_SSJ_CODES.put(1, Arrays.asList( +// "L2007", "L2008", "L2005", "L2006", "L2013" +// )); +// +// // 2区域输送机编号 +// AREA_SSJ_CODES.put(2, Arrays.asList( +// "L2003", "L2004", "L2012", "L2001", "L2002" +// )); +// +// // 3区域输送机编号 +// AREA_SSJ_CODES.put(3, Arrays.asList( +// "L1001", "L1002", "L1011" +// )); +// +// // 4区域输送机编号 +// AREA_SSJ_CODES.put(4, Arrays.asList( +// "L1003", "L1004", "L1012" +// )); } /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/controller/Wcs2WmsController.java b/ruoyi-admin/src/main/java/com/ruoyi/api/controller/Wcs2WmsController.java index 1f59311..6c0e7da 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/controller/Wcs2WmsController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/controller/Wcs2WmsController.java @@ -21,7 +21,7 @@ public class Wcs2WmsController { private IWcsPortService wcsPortService; /** - * 接收出库任务 + * 接收wms出库任务 * * @param receiveOutJob * @return diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/JobParam.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/JobParam.java index c396884..d93de24 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/JobParam.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/JobParam.java @@ -8,7 +8,20 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor public class JobParam { + /** + * 作业号 + */ private String jobId; + + /** + * 托盘号 + */ private String trayCode; + + /** + * 任务号 + */ private String taskNo; + + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/ReceiveJob.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/ReceiveJob.java index 7299670..92b8c66 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/ReceiveJob.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/ReceiveJob.java @@ -8,13 +8,48 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor public class ReceiveJob { + /** + * 任务号 + */ private String taskNo; + + /** + * 货位 + */ private String cargoSpaceId; + + /** + * 出口 + */ private String exitId; + + /** + * 托盘号 + */ private String trayCode; + + /** + * 入口 + */ private String entranceId; + + /** + * 任务类型 + */ private String inOrOut; + + /** + * 作业号 + */ private String jobId; + + /** + * 巷道号 + */ private String roadwayId; + + /** + * + */ private String departmentId; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/exception/TaskExceptionRequest.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/exception/TaskExceptionRequest.java new file mode 100644 index 0000000..206f127 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/exception/TaskExceptionRequest.java @@ -0,0 +1,22 @@ +package com.ruoyi.api.domain.wcs2wms.exception; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TaskExceptionRequest { + + /** + * 任务号 + */ + private String taskNo; + + /** + * 异常类型 + */ + private int exceptionType; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/stockin/StockinReceive.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/stockin/StockinReceive.java new file mode 100644 index 0000000..568468a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/stockin/StockinReceive.java @@ -0,0 +1,29 @@ +package com.ruoyi.api.domain.wcs2wms.stockin; + +public class StockinReceive { + + /** + * wms下发任务号 + */ + private String taskNo; + + /** + * WMS分配的目标库位编号 + */ + private String cargoSpaceId; + + /** + * 巷道编号 + */ + private String roadwayId; + + /** + * 作业单ID + */ + private String jobId; + + /** + * 入出库标识 + */ + private String inOrOut; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/stockin/StockinRequest.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/stockin/StockinRequest.java new file mode 100644 index 0000000..65604d4 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/stockin/StockinRequest.java @@ -0,0 +1,36 @@ +package com.ruoyi.api.domain.wcs2wms.stockin; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 入库请求参数 + * (扫码失败、超重、超高时,WCS 仍调用此接口传递异常信息,WMS 记录异常但不返回任务号) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class StockinRequest { + + /** + * 托盘号 + */ + private String trayCode; + + /** + * 重量 + */ + private int weight; + + /** + * 货物高度 + */ + private int height; + + /** + * 异常信息 + */ + private String errorInfo; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/taskFinish/TaskFinishRequest.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/taskFinish/TaskFinishRequest.java new file mode 100644 index 0000000..507a238 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/taskFinish/TaskFinishRequest.java @@ -0,0 +1,23 @@ +package com.ruoyi.api.domain.wcs2wms.taskFinish; + +public class TaskFinishRequest { + + /** + * 任务号 + */ + private String taskNo; + + /** + * 作业单ID + */ + private String jobId; + + /** + * 完成类型枚举值 + * 1-入库完成 2-出库完成 + */ + private String type; + + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/taskFinish/taskFinishReceive.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/taskFinish/taskFinishReceive.java new file mode 100644 index 0000000..cb84a3b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/taskFinish/taskFinishReceive.java @@ -0,0 +1,4 @@ +package com.ruoyi.api.domain.wcs2wms.taskFinish; + +public class taskFinishReceive { +} 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 16d2b50..2c1ee54 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 @@ -11,8 +11,10 @@ import com.ruoyi.api.domain.agv.genAgvSchedulingTask.GenAgvSchedulingTaskRequest import com.ruoyi.api.domain.agv.genAgvSchedulingTask.GenAgvSchedulingTaskResponse; import com.ruoyi.api.domain.wcs2wms.JobParam; import com.ruoyi.api.domain.wcs2wms.ReceiveJob; +import com.ruoyi.api.domain.wcs2wms.exception.TaskExceptionRequest; import com.ruoyi.bas.port.domain.WcsPort; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.exception.job.TaskException; import com.ruoyi.job.domain.MydoJob; import com.ruoyi.queue.agv.domain.AgvQueue; import org.aspectj.weaver.loadtime.Aj; @@ -42,12 +44,12 @@ public interface IApiService */ public AgvQueue createAgvQueue(String code1,String code2,String wmsTrayCode,String taskCode,String wmsTaskType,String traySize,String wmsTaskNo); - /** - * 取消AGV任务 - * - * @param cancelTaskRequest - * @return - */ + /** + * 取消AGV任务 + * + * @param cancelTaskRequest + * @return + */ public CancelTaskResponse cancelTask(CancelTaskRequest cancelTaskRequest); /** @@ -115,6 +117,13 @@ public interface IApiService */ AjaxResult reAssign(JobParam jobParam); + /** + * 放货有货 (参数类型TaskExceptionRequest) + * @param taskExceptionRequest + * @return + */ + AjaxResult reAssign(TaskExceptionRequest taskExceptionRequest); + /** * 取货无货,重新分配单据 * @param jobParam @@ -122,6 +131,13 @@ public interface IApiService */ AjaxResult reMaterial(JobParam jobParam); + /** + * 取货无货(参数类型TaskExceptionRequest) + * @param taskExceptionRequest + * @return + */ + AjaxResult reMaterial(TaskExceptionRequest taskExceptionRequest); + /** * 入库请求生成作业 */ @@ -138,4 +154,9 @@ public interface IApiService AjaxResult deleteAgvTray(AgvQueue agvQueue); AjaxResult requestWmsSpace(MydoJob mydoJob); + + + + + } 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 d133cd2..54bcc53 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 @@ -18,6 +18,7 @@ import com.ruoyi.api.domain.agv.genAgvSchedulingTask.GenAgvSchedulingTaskRespons import com.ruoyi.api.domain.agv.genAgvSchedulingTask.PositionCodeData; import com.ruoyi.api.domain.wcs2wms.JobParam; import com.ruoyi.api.domain.wcs2wms.ReceiveJob; +import com.ruoyi.api.domain.wcs2wms.exception.TaskExceptionRequest; import com.ruoyi.api.service.IApiService; import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService; import com.ruoyi.bas.port.domain.WcsPort; @@ -210,6 +211,7 @@ public class ApiServiceImpl implements IApiService { } + /** * 取消ctu任务 * @@ -236,6 +238,11 @@ public class ApiServiceImpl implements IApiService { + /** + * 异常重分(参数类型JobParam) + * @param jobParam + * @return + */ @Override public AjaxResult reAssign(JobParam jobParam) { RequestLog requestLog = requestLogService.getRequestLog(RE_ASSIGN_URL, "重新分配货位", JSONUtil.toJsonStr(jobParam)); @@ -250,6 +257,30 @@ public class ApiServiceImpl implements IApiService { return AjaxResult.error(); } + /** + * 异常重分(参数类型TaskExceptionRequest) + * @param taskExceptionRequest + * @return + */ + @Override + public AjaxResult reAssign(TaskExceptionRequest taskExceptionRequest) { + RequestLog requestLog = requestLogService.getRequestLog(WMS_TASK_EXCEPTION, "入库异常-重新分配货位", JSONUtil.toJsonStr(taskExceptionRequest)); + if ("1".equals(requestLog.getIsSuccessful())){ + InterfaceReceive bean = JSONUtil.toBean(requestLog.getResponseBody(), InterfaceReceive.class); + MydoJob wmsMydoJob = BeanUtil.toBean(bean.getData(), MydoJob.class); + MydoJob mydoJob = mydoJobService.selectMydoJobByJobId(wmsMydoJob.getJobId()); + mydoJob.setCargoSpaceId(wmsMydoJob.getCargoSpaceId()); + mydoJobService.updateMydoJob(mydoJob); + return AjaxResult.success(); + } + return AjaxResult.error(); + } + + /** + * 出库异常作废(参数类型jobParam) + * @param jobParam + * @return + */ @Override public AjaxResult reMaterial(JobParam jobParam) { RequestLog requestLog = requestLogService.getRequestLog(RE_MATERIAL_URL, "重新分配物料", JSONUtil.toJsonStr(jobParam)); @@ -259,6 +290,22 @@ public class ApiServiceImpl implements IApiService { return AjaxResult.error(); } + /** + * 出库异常作废(参数类型TaskExceptionRequest) + * @param taskExceptionRequest + * @return + */ + @Override + public AjaxResult reMaterial(TaskExceptionRequest taskExceptionRequest) { + RequestLog requestLog = requestLogService.getRequestLog(WMS_TASK_EXCEPTION, "出库无货异常-任务作废", JSONUtil.toJsonStr(taskExceptionRequest)); + if ("1".equals(requestLog.getIsSuccessful())){ + return AjaxResult.success(); + } + return AjaxResult.error(); + } + + + /** * 生成agv队列----临时修改起终点 @@ -288,11 +335,11 @@ public class ApiServiceImpl implements IApiService { agvQueue.setTaskType("A22"); agvQueue.setCtnrType("1"); //rcslite开启托盘自动调整位置后 - 测试一巷道放货区分托盘类型 -// if (traySize == "2" || traySize == "3") { -// agvQueue.setCtnrType("3"); -// }else{ -// agvQueue.setCtnrType("1"); -// } + if (traySize == "2" || traySize == "3") { + agvQueue.setCtnrType("3"); + }else{ + agvQueue.setCtnrType("1"); + } agvQueue.setCtnrCode(traySize); agvQueue.setCtnrNum("0"); @@ -308,6 +355,7 @@ public class ApiServiceImpl implements IApiService { return agvQueue; } + /** * 取消AGV任务 * @@ -321,6 +369,7 @@ public class ApiServiceImpl implements IApiService { } + /** * 继续agv任务 * @@ -365,9 +414,15 @@ public class ApiServiceImpl implements IApiService { return genAgvSchedulingTask(genAgvSchedulingTaskRequest); } + + /** + * 请求wms获取入库任务参数 + * @param param + * @return + */ @Override public AjaxResult createInMydoJob(Map param) { - RequestLog requestLog = requestLogService.getRequestLog(CREATE_IN_MYDO_JOB_URL, "入库请求生成作业", JSONUtil.toJsonStr(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()); @@ -379,17 +434,23 @@ public class ApiServiceImpl implements IApiService { @Override public AjaxResult receiveOutMydoJob(ReceiveJob receiveOutJob) { + + //检查任务是否存在,避免重复生成 + MydoJob job = new MydoJob(); + job.setTaskNo(receiveOutJob.getTaskNo()); + List tasks = mydoJobService.selectMydoJobList(job); + + if (tasks.size() != 0) { + log.info("【请求异常】wms下发出库任务失败,该任务已存在,任务号:{}", receiveOutJob.getTaskNo()); + return AjaxResult.error("【请求异常】wms下发出库任务失败,该任务已存在,任务号:" + receiveOutJob.getTaskNo()); + } + + //生成出库作业 MydoJob mydoJob = new MydoJob(); mydoJob.setJobId(receiveOutJob.getJobId()); mydoJob.setTaskNo(receiveOutJob.getTaskNo()); mydoJob.setCargoSpaceId(receiveOutJob.getCargoSpaceId()); - - if("L2002".equals(receiveOutJob.getExitId()) || "L2008".equals(receiveOutJob.getExitId()) - || "L2004".equals(receiveOutJob.getExitId()) || "L2006".equals(receiveOutJob.getExitId())) { - mydoJob.setExitId("1"); - }else{ - mydoJob.setExitId(receiveOutJob.getExitId()); - } + mydoJob.setExitId("G1004"); mydoJob.setInOrOut(receiveOutJob.getInOrOut()); mydoJob.setStatus("1"); mydoJob.setPriority(Long.valueOf(10)); @@ -397,10 +458,11 @@ public class ApiServiceImpl implements IApiService { mydoJob.setRoadwayId(receiveOutJob.getRoadwayId()); mydoJob.setCreateTime(DateUtils.getNowDate()); mydoJob.setExecutionPhase(TASK_EP_CREATE); - mydoJob.setTraySize(receiveOutJob.getDepartmentId()); +// mydoJob.setTraySize(receiveOutJob.getDepartmentId()); int i = mydoJobService.insertMydoJob(mydoJob); if (i > 0) { - return AjaxResult.success(); + return AjaxResult.success( + "【请求成功】wms下发出库作业,作业单号:" + receiveOutJob.getJobId() + ",任务号:" + receiveOutJob.getTaskNo() + ",出库货位:" + receiveOutJob.getCargoSpaceId()); }else{ return AjaxResult.error(); } @@ -423,6 +485,12 @@ public class ApiServiceImpl implements IApiService { } } //todo 新增agv站点 + + /** + * AGV站点映射 + * @param agvQueue + * @return + */ @Override public AjaxResult deleteAgvTray(AgvQueue agvQueue) { Map paramMap = new HashMap<>(); @@ -492,4 +560,5 @@ public class ApiServiceImpl implements IApiService { } + } 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 e1c0c5b..94c1a3c 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 @@ -115,7 +115,7 @@ public class RequestLogServiceImpl implements IRequestLogService * @return requestLog */ @Override - public RequestLog getRequestLog(String url, String endPoint,String param) { + public RequestLog getRequestLog(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/common/Constant.java b/ruoyi-admin/src/main/java/com/ruoyi/common/Constant.java index 4315932..1e98b4b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/common/Constant.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/common/Constant.java @@ -6,6 +6,7 @@ public class Constant { public static final String WMS_BASE_URL = "http://192.168.58.10:8082/api2wms/"; public static final String RCS_BASE_URL = "http://192.168.58.101:8182/rcms/services/rest/hikRpcService/"; + //#region AGV接口url public static final String GEN_AGV_SCHEDULING_TASK = RCS_BASE_URL+"genAgvSchedulingTask"; public static final String CANCEL_TASK_URL = RCS_BASE_URL+"cancelTask"; public static final String CONTINUE_TASK_URL = RCS_BASE_URL+"continueTask"; @@ -19,6 +20,23 @@ public class Constant { public static final String REQUEST_ENTER_URL = WMS_BASE_URL+"requestEnterByTrayCodeAndEntranceId"; public static final String REQUEST_IN_SPACE_URL = WMS_BASE_URL+"requestInSpace"; + //#endregion + + /** + * 向wms请求入库url + */ + public static final String WMS_STOCKIN_MYDOJOB = WMS_BASE_URL + "wcs/inbound/info"; + + /** + * 向wms请求任务回传url + */ + public static final String WMS_TASK_FINISH = WMS_BASE_URL + "wcs/task/complete"; + + /** + * 异常信息回传url + */ + public static final String WMS_TASK_EXCEPTION = WMS_BASE_URL + "wcs/exception/report"; + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/TaskExceptionType.java b/ruoyi-admin/src/main/java/com/ruoyi/common/TaskExceptionType.java new file mode 100644 index 0000000..f14e712 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/common/TaskExceptionType.java @@ -0,0 +1,19 @@ +package com.ruoyi.common; + +/** + * 异常任务 + */ +public class TaskExceptionType { + + /** + * 任务异常 - 入库放货有货 + */ + public static final int TASK_EXCEPTION_STOCKIN_OCCUPIED = 1; + + /** + * 任务异常 - 出库取货无货 + */ + public static final int TASK_EXCEPTION_STOCKOUT_EMPTY = 2; + + +} 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 acfd302..3a0018f 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 @@ -87,6 +87,19 @@ public class DeviceSsj extends BaseEntity private int taskNo2; + /** + * 出入库模式 + */ private int inOrOut; + /** + * 托盘高度 + */ + private int height; + + /** + * 称重 + */ + private int weight; + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/ScheduleThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/ScheduleThread.java index bb4a048..36ffb59 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/ScheduleThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/ScheduleThread.java @@ -12,12 +12,8 @@ import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; import com.ruoyi.common.domain.CustomThread; import com.ruoyi.schedule.scheduleTask.ddj.DdjThread; import com.ruoyi.schedule.scheduleTask.monit.MonitoringThread; -import com.ruoyi.schedule.scheduleTask.ssj.floor1.Floor1BothWayInSsjThread; -import com.ruoyi.schedule.scheduleTask.ssj.floor1.Floor1BothWayOutSsjThread; -import com.ruoyi.schedule.scheduleTask.ssj.floor1.Floor1SingleSsjThread; -import com.ruoyi.schedule.scheduleTask.ssj.floor2.Floor2InOutSsjThread; -import com.ruoyi.schedule.scheduleTask.ssj.floor2.Floor2RoadWaySsjThread; -import com.ruoyi.schedule.scheduleTask.ssj.floor2.LineSsjThread; +import com.ruoyi.schedule.scheduleTask.ssj.PortConvThread; +import com.ruoyi.schedule.scheduleTask.ssj.RoadConvThread; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -27,7 +23,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; -import java.net.InetSocketAddress; import java.net.Socket; import java.util.HashMap; import java.util.List; @@ -39,14 +34,11 @@ public class ScheduleThread { public CustomThread plcSsjReadCustomThread; public CustomThread plcDdj1ReadCustomThread; - public CustomThread plcDdj2ReadCustomThread; +// public CustomThread plcDdj2ReadCustomThread; + + public CustomThread portConvCustomThread; + public CustomThread roadConvCustomThread; - public CustomThread floor1BothWayInSsjCustomThread; - public CustomThread floor1BothWayOutSsjCustomThread; - public CustomThread floor1SingleSsjCustomThread; - public CustomThread floor2InSsjCustomThread; - public CustomThread floor2OutSsjCustomThread; - public CustomThread lineSsjCustomThread; public CustomThread monitoringCustomThread; public CustomThread ddj1CustomThread; @Autowired @@ -80,23 +72,11 @@ public class ScheduleThread { MonitoringThread monitoringThread = new MonitoringThread(); monitoringCustomThread = new CustomThread(new Thread(monitoringThread), monitoringThread); - Floor1BothWayInSsjThread floor1BothWayInSsjThread = new Floor1BothWayInSsjThread(); - floor1BothWayInSsjCustomThread = new CustomThread(new Thread(floor1BothWayInSsjThread), floor1BothWayInSsjThread); + PortConvThread portConvThread = new PortConvThread(); + portConvCustomThread = new CustomThread(new Thread(portConvThread), portConvThread); - Floor1BothWayOutSsjThread floor1BothWayOutSsjThread = new Floor1BothWayOutSsjThread(); - floor1BothWayOutSsjCustomThread = new CustomThread(new Thread(floor1BothWayOutSsjThread), floor1BothWayOutSsjThread); - - Floor1SingleSsjThread floor1SingleSsjThread = new Floor1SingleSsjThread(); - floor1SingleSsjCustomThread = new CustomThread(new Thread(floor1SingleSsjThread), floor1SingleSsjThread); - - Floor2InOutSsjThread floor2InSsjThread = new Floor2InOutSsjThread(); - floor2InSsjCustomThread = new CustomThread(new Thread(floor2InSsjThread), floor2InSsjThread); - - LineSsjThread lineSsjThread = new LineSsjThread(); - lineSsjCustomThread = new CustomThread(new Thread(lineSsjThread), lineSsjThread); - - Floor2RoadWaySsjThread floor2OutSsjThread = new Floor2RoadWaySsjThread(); - floor2OutSsjCustomThread = new CustomThread(new Thread(floor2OutSsjThread), floor2OutSsjThread); + RoadConvThread roadConvThread = new RoadConvThread(); + roadConvCustomThread = new CustomThread(new Thread(roadConvThread), roadConvThread); DdjThread ddj1Thread = new DdjThread(); ddj1CustomThread = new CustomThread(new Thread(ddj1Thread), ddj1Thread); @@ -119,7 +99,7 @@ public class ScheduleThread { //获取堆垛机 ConcurrentHashMap ddj1List = new ConcurrentHashMap<>(); - ConcurrentHashMap ddj2List = new ConcurrentHashMap<>(); +// ConcurrentHashMap ddj2List = new ConcurrentHashMap<>(); List msgDdjs = msgDdjService.selectMsgDdjList(new MsgDdj()); for (MsgDdj msgDdj : msgDdjs) { msgDdj.setPlcDbReadAddress(msgDdj.getPlcDbReadAddress()); @@ -131,13 +111,13 @@ public class ScheduleThread { ddj1List.put("ddj1", msgDdj); PlcDdj1Read.deviceDdjMap = ddj1List; break; - case 2: - PlcDdj2Read plcDdj2Read = new PlcDdj2Read(msgDdj, new PlcConnectInfo(msgDdj.getIp(), Convert.toInt(msgDdj.getPort()))); - Thread plcDdj2ReadThread = new Thread(plcDdj2Read); - plcDdj2ReadCustomThread = new CustomThread(plcDdj2ReadThread, plcDdj2Read); - ddj2List.put("ddj2", msgDdj); - PlcDdj2Read.deviceDdjMap = ddj2List; - break; +// case 2: +// PlcDdj2Read plcDdj2Read = new PlcDdj2Read(msgDdj, new PlcConnectInfo(msgDdj.getIp(), Convert.toInt(msgDdj.getPort()))); +// Thread plcDdj2ReadThread = new Thread(plcDdj2Read); +// plcDdj2ReadCustomThread = new CustomThread(plcDdj2ReadThread, plcDdj2Read); +// ddj2List.put("ddj2", msgDdj); +// PlcDdj2Read.deviceDdjMap = ddj2List; +// break; } } } @@ -148,7 +128,7 @@ public class ScheduleThread { public void startAllThread() { plcSsjReadCustomThread.getThread().start(); plcDdj1ReadCustomThread.getThread().start(); - plcDdj2ReadCustomThread.getThread().start(); +// plcDdj2ReadCustomThread.getThread().start(); isRun = true; } @@ -157,12 +137,8 @@ public class ScheduleThread { */ public void startAllThread2() { monitoringCustomThread.thread.start(); - floor1BothWayInSsjCustomThread.thread.start(); - floor1BothWayOutSsjCustomThread.thread.start(); - floor1SingleSsjCustomThread.thread.start(); - floor2InSsjCustomThread.thread.start(); - lineSsjCustomThread.thread.start(); - floor2OutSsjCustomThread.thread.start(); + portConvCustomThread.thread.start(); + roadConvCustomThread.thread.start(); ddj1CustomThread.thread.start(); isRun2 = true; } @@ -173,7 +149,7 @@ public class ScheduleThread { public void stopAllThread() { plcSsjReadCustomThread.runnable.isRun = false; plcDdj1ReadCustomThread.runnable.isRun = false; - plcDdj2ReadCustomThread.runnable.isRun = false; +// plcDdj2ReadCustomThread.runnable.isRun = false; plcReadInit(); isRun = false; } @@ -183,12 +159,9 @@ public class ScheduleThread { */ public void stopAllThread2() { monitoringCustomThread.runnable.isRun = false; - floor1BothWayInSsjCustomThread.runnable.isRun = false; - floor1BothWayOutSsjCustomThread.runnable.isRun = false; - floor1SingleSsjCustomThread.runnable.isRun = false; - floor2InSsjCustomThread.runnable.isRun = false; - lineSsjCustomThread.runnable.isRun = false; - floor2OutSsjCustomThread.runnable.isRun = false; + portConvCustomThread.runnable.isRun = false; + roadConvCustomThread.runnable.isRun = false; + ddj1CustomThread.runnable.isRun = false; scheduleInit(); isRun2 = false; @@ -219,11 +192,11 @@ public class ScheduleThread { // String code = sendWeight("192.168.56.33", 2002); // System.err.println(code); - String pp = "MODEL:EX-1203 COLOR:9005 SERIAL:QT25C1879 V:220 Hz:50 PH:1 N.W.:207kg G.W.:238kg @:9781C52TQ$S0T0T0T3T0U7T0$7005280MA0A@"; - String ss = "MODEL:TR-360 COLOR:7016 SERIAL:QT25C1899 V:380 Hz:50 PH:3 N.W.:231kg G.W.:261kg @:9981C52TQ$S0T0U5RDS2S3S6T0T3T0U7T0$4105230IF0A@"; - System.err.println(pp); - System.err.println(pp.length()); - System.err.println(ss.length()); +// String pp = "MODEL:EX-1203 COLOR:9005 SERIAL:QT25C1879 V:220 Hz:50 PH:1 N.W.:207kg G.W.:238kg @:9781C52TQ$S0T0T0T3T0U7T0$7005280MA0A@"; +// String ss = "MODEL:TR-360 COLOR:7016 SERIAL:QT25C1899 V:380 Hz:50 PH:3 N.W.:231kg G.W.:261kg @:9981C52TQ$S0T0U5RDS2S3S6T0T3T0U7T0$4105230IF0A@"; +// System.err.println(pp); +// System.err.println(pp.length()); +// System.err.println(ss.length()); } public static String sendWeight(String ip, int por) { 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 b795d1b..3cefc7d 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 @@ -53,16 +53,10 @@ public class PlcSsjRead implements Runnable { DeviceSsj ssjDevice = deviceSsjMap.get(ssjCode); switch (ssjDevice.getType()) { case "1": - readPlcSmSsj(ssjDevice); + readPlcInOutSsj(ssjDevice);//出入口输送机 break; case "2": - readPlcInOutSsj(ssjDevice); - break; - case "3": - readPlcOtherSsj(ssjDevice); - break; - case "4": - readPlcRoadWaySsj(ssjDevice); + readPlcRoadWaySsj(ssjDevice);//巷道输送机 break; } } @@ -81,6 +75,7 @@ public class PlcSsjRead implements Runnable { } } + /** * 其他输送机 * @@ -97,22 +92,6 @@ public class PlcSsjRead implements Runnable { } } - /** - * 巷道输送机 - * - * @param ssjDevice - */ - private void readPlcRoadWaySsj(DeviceSsj ssjDevice) { - OperateResultExOne read2 = readWriteNet.Read(ssjDevice.getPlcDbReadAddress(), Short.parseShort("10")); - 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)); - } - } /** * 入出库输送机 @@ -134,13 +113,14 @@ public class PlcSsjRead implements Runnable { } } + /** - * 产线输送机 + * 巷道输送机 * * @param ssjDevice */ - private void readPlcSmSsj(DeviceSsj ssjDevice) { - OperateResultExOne read2 = readWriteNet.Read(ssjDevice.getPlcDbReadAddress(), Short.parseShort("30")); + private void readPlcRoadWaySsj(DeviceSsj ssjDevice) { + OperateResultExOne read2 = readWriteNet.Read(ssjDevice.getPlcDbReadAddress(), Short.parseShort("10")); String ddsx1 = "0"; if (read2.IsSuccess) { ddsx1 = SoftBasic.ByteToHexString(read2.Content); @@ -148,76 +128,82 @@ public class PlcSsjRead implements Runnable { 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)); - } - } - if(!"".equals(trayCodeReadAddress)){ - OperateResultExOne trayCodeRead = readWriteNet.Read(trayCodeReadAddress, Short.parseShort("200")); - if (trayCodeRead.IsSuccess){ - byte[] content = trayCodeRead.Content; - //去除bytes中 - ssjDevice.setTrayCode(ParseUtil.filterAndConvert(trayCodeRead.Content)); -// if("L2004".equals(ssjDevice.getDeviceCode())){ -// ssjDevice.setTrayCode("gMODEL:1 COLOR:1 SERIAL:2 V:1 Hz:1 PH:1 N.W.:1 G.W.:1 ITEM_CODE:12345 @:1$S0T0S1T0S1T0S1T0$40001015202@"); -// }else{ -// ssjDevice.setTrayCode("gMODEL:1 COLOR:1 SERIAL:1 V:1 Hz:1 PH:1 N.W.:1 G.W.:1 ITEM_CODE:123456 @:1$S0T0S1T0S1T0S1T0$40001015202@"); -// } - } - } - 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)); - } - } } } + /** + * 产线输送机 + * + * @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)); +// } +// } +// } +// } + + void ConnectServer() { siemensS7Net = new SiemensS7Net(SiemensPLCS.S1500); 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 334ebe2..fc2f3a0 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 @@ -1,16 +1,19 @@ package com.ruoyi.schedule.scheduleTask.ddj; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjUtil; import com.ruoyi.api.domain.wcs2wms.JobParam; +import com.ruoyi.api.domain.wcs2wms.exception.TaskExceptionRequest; 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.utils.spring.SpringUtils; import com.ruoyi.device.ddj.domain.MsgDdj; +import com.ruoyi.device.ssj.service.IDeviceSsjService; import com.ruoyi.job.domain.MydoJob; import com.ruoyi.job.service.IMydoJobService; import com.ruoyi.queue.ddj.domain.DdjDeviceExecutionQueue; @@ -25,6 +28,9 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import static com.ruoyi.common.TaskExceptionType.TASK_EXCEPTION_STOCKIN_OCCUPIED; +import static com.ruoyi.common.TaskExceptionType.TASK_EXCEPTION_STOCKOUT_EMPTY; + @Slf4j public class DdjThread implements Runnable { @@ -37,6 +43,7 @@ public class DdjThread implements Runnable { private IMydoJobService mydoJobService; private IBasCargoSpaceService basCargoSpaceService; + public boolean isRun = true; @@ -45,7 +52,7 @@ public class DdjThread implements Runnable { ddjCodeList = new HashMap<>(); ArrayList ddjCodes = new ArrayList<>(); ddjCodes.add("ddj1"); - ddjCodes.add("ddj2"); +// ddjCodes.add("ddj2"); ddjCodeList.put("ddj", ddjCodes); apiService = SpringUtils.getBean(IApiService.class); @@ -69,9 +76,9 @@ public class DdjThread implements Runnable { ddjTask(PlcDdj1Read.deviceDdjMap.get(ddjCode)); } //PlcDdj2Read.deviceDdjMap.containsKey(ddjCode) - if ("ddj2".equals(ddjCode)) { - ddjTask(PlcDdj2Read.deviceDdjMap.get(ddjCode)); - } +// if ("ddj2".equals(ddjCode)) { +// ddjTask(PlcDdj2Read.deviceDdjMap.get(ddjCode)); +// } } catch (RuntimeException e) { log.error(e.getMessage(), e); } @@ -89,16 +96,21 @@ public class DdjThread implements Runnable { } private void ddjTask(MsgDdj ddj) { - /* - 第一部分 + /* --------------------------------------【1 处理已经完成的作业】-------------------------------------- 堆垛机线程进来后第一件事先进行堆垛机正执行任务的账务处理 以防存在漏处理,没处理的情况发生 */ + + // 检查当前堆垛机参数 - 是否有执行中的作业 + // 1.联机自动【5】 2.设备状态【0】 3.执行阶段【0】【5】(无执行中的任务) if (ddj.getCzfs() == 5 && ddj.getSbzt() == 0 && (ddj.getJdbz() == 5 || ddj.getJdbz() == 0)) { Long rwh = ddj.getRwh(); + //完成作业 MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(rwh); DdjDeviceExecutionQueue ddjDeviceExecutionQueue = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(rwh,ddj.getId()); + + //满足上述条件,表示该任务已完成-执行任务回传 if (mydoJob != null && ddjDeviceExecutionQueue != null) { //回传完成信号 ddjTaskFinish(rwh, ddj.getId()); @@ -106,10 +118,9 @@ public class DdjThread implements Runnable { } } - /* - 第二部分 - 跟踪队列执行阶段 - */ + //-------------------------------------- 【2 更新执行阶段】 -------------------------------------- + + // 1.联机自动【5】 2.设备状态 - 运行中【1】 3.执行阶段【2】 if (ddj.getCzfs() == 5 && ddj.getSbzt() == 1 && ddj.getJdbz() == 2) { //根据堆垛机上任务号,修改任务执行阶段 Long rwh = ddj.getRwh(); @@ -122,23 +133,37 @@ public class DdjThread implements Runnable { } } - /* - 第三部分 - 放货有货,重新分配货位 - */ + /* -------------------------------------- 【3 放货有货,重新分配货位】-------------------------------------- */ + + // 1.联机自动【5】 2.设备状态-放货有货【1052】 3.执行阶段【0】【5】(无执行中的任务) if (ddj.getCzfs() == 5 && ddj.getSbzt() == 1052 && ddj.getJdbz() < 5 && ddj.getYxxf() == 1) { - //判断堆垛机上任务是否已重分,若未重分,则调用接口,请求重分货位 + + // 判断堆垛机上任务是否已重分,若未重分,则调用接口,请求重分货位 Long rwh = ddj.getRwh(); + + //获取堆垛机正在执行中的任务和队列 MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(rwh); DdjDeviceExecutionQueue ddjDeviceExecutionQueue = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(rwh, ddj.getId()); + + //更新异常类型【FaultFlag】-1 if ("0".equals(mydoJob.getFaultFlag()) && "1".equals(ddjDeviceExecutionQueue.getSpare1())) { mydoJob.setStatus("1"); mydoJobService.updateMydoJob(mydoJob); - AjaxResult ajaxResult = apiService.reAssign(new JobParam(mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getTaskNo())); + + //向wms请求重分接口 + // todo-在此商定每种异常类型对应的值 + AjaxResult ajaxResult = apiService.reAssign(new TaskExceptionRequest(mydoJob.getTaskNo(),TASK_EXCEPTION_STOCKIN_OCCUPIED)); if (ajaxResult.isSuccess()){ + //获取返回的新货位 + MydoJob mydoJobReAssign = BeanUtil.toBean(ajaxResult.get("data"), MydoJob.class); + + //更新任务参数 mydoJob = mydoJobService.selectMydoJobByTaskNo(rwh); + mydoJob.setCargoSpaceId(mydoJobReAssign.getCargoSpaceId()); mydoJob.setFaultFlag("2"); mydoJobService.updateMydoJob(mydoJob); + + //获取重分的货位重新向堆垛机下发任务 BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByWmsCargoSpaceId(mydoJob.getCargoSpaceId()); ddjDeviceExecutionQueue.setMbph(basCargoSpace.getThePlatoon()); ddjDeviceExecutionQueue.setMblh(basCargoSpace.getTheColumn()); @@ -149,18 +174,21 @@ public class DdjThread implements Runnable { } } - /* - 第四部分 - 取货无货,重新分配单据 - */ + +// -------------------------------------- 4 取货无货,作废当前任务,重新分配单据 -------------------------------------- + + // 1.联机自动【5】 2.设备状态-取货无货【1053】 3.执行阶段【<5】(任务执行中) if (ddj.getCzfs() == 5 && ddj.getSbzt() == 1053 && ddj.getJdbz() < 5) { Long rwh = ddj.getRwh(); MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(rwh); + //无货异常处理 DdjDeviceExecutionQueue ddjDeviceExecutionQueue = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(rwh,ddj.getId()); + //找到对应任务 调用api接口 取货无货,重新分配单据 if (ObjUtil.isNotNull(ddjDeviceExecutionQueue)) { - AjaxResult ajaxResult = apiService.reMaterial(new JobParam(mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getTaskNo())); + //向wms返回异常信息 + AjaxResult ajaxResult = apiService.reMaterial(new TaskExceptionRequest(mydoJob.getTaskNo(),TASK_EXCEPTION_STOCKOUT_EMPTY)); if (ajaxResult.isSuccess()) { //作废作业 InvalidMydoJob(rwh, ddj.getId()); @@ -168,18 +196,22 @@ public class DdjThread implements Runnable { } } - /* - 第五部分 - 堆垛机任务下发 - */ +// -------------------------------------- 5 下发堆垛机任务 -------------------------------------- + + //重分货位后重下 if (ddj.getYxxf() == 1 && ddj.getCzfs() == 5 && ddj.getSbzt() == 1052) { Long rwh = ddj.getRwh(); - //查询作业 + + //查询执行中的作业 MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(rwh); + + //该任务存在且【FaultFlag】为 2-已重分完成 if (ObjUtil.isNotNull(mydoJob) && "2".equals(mydoJob.getFaultFlag())) { + //判断任务是否重分完成 DdjDeviceExecutionQueue ddjDeviceExecutionQueue = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(rwh,ddj.getId()); if (ObjUtil.isNotNull(ddjDeviceExecutionQueue) && "0".equals(ddjDeviceExecutionQueue.getDdjxf())) { + //重新下发堆垛机任务 int i = issuedDDJTask(ddj.getId(), ddjDeviceExecutionQueue); if (i == 1) { @@ -196,8 +228,14 @@ public class DdjThread implements Runnable { } } } + //正常下发 if (ddj.getYxxf() == 1 && ddj.getCzfs() == 5 && ddj.getSbzt() == 0 ) { + + //todo 输送机入出库模式限制任务下发 + + + //检查是否有正在执行的堆垛机队列 Long rwh = ddj.getRwh(); DdjDeviceExecutionQueue ddjDeviceExecutionQueueRunningParam = new DdjDeviceExecutionQueue(); ddjDeviceExecutionQueueRunningParam.setDdjxf("1"); @@ -214,6 +252,7 @@ public class DdjThread implements Runnable { ddjDeviceExecutionQueueParam.setDdjxf("0"); ddjDeviceExecutionQueueParam.setDevId(ddj.getId()); List ddjDeviceExecutionQueues = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueList(ddjDeviceExecutionQueueParam); + //取堆垛机队列中,生成时间最早的执行队列下发 if (CollUtil.isNotEmpty(ddjDeviceExecutionQueues)) { DdjDeviceExecutionQueue ddjDeviceExecutionQueue = ddjDeviceExecutionQueues.get(0); @@ -279,4 +318,6 @@ public class DdjThread implements Runnable { } + + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/monit/MonitoringThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/monit/MonitoringThread.java index 33d3cc8..4e89fd4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/monit/MonitoringThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/monit/MonitoringThread.java @@ -87,46 +87,46 @@ public class MonitoringThread implements Runnable { } } } - for (String ddjCode : PlcDdj2Read.deviceDdjMap.keySet()) { - MsgDdj msgDdj = PlcDdj2Read.deviceDdjMap.get(ddjCode); - msgDdjService.updateMsgDdj(msgDdj); - - if (msgDdj.getSbzt() > 1000) { - BasFaultRecord param = new BasFaultRecord(); - param.setTaskNo(msgDdj.getRwh() + ""); - param.setDeviceId(String.valueOf(msgDdj.getId())); - param.setDeviceType("DDJ"); - param.setFault(msgDdj.getSbzt() + ""); - param.setJobId("0"); - List basFaultRecords = basFaultRecordService.selectBasFaultRecordList(param); - if (CollUtil.isEmpty(basFaultRecords)) { - BasFaultRecord faultRecord = new BasFaultRecord(); - faultRecord.setId(IdUtil.fastSimpleUUID()); - faultRecord.setDeviceId(String.valueOf(msgDdj.getId())); - faultRecord.setDeviceName(msgDdj.getName()); - faultRecord.setDeviceType("DDJ"); - faultRecord.setJobId("0"); - faultRecord.setTaskNo(msgDdj.getRwh() + ""); - faultRecord.setFault(msgDdj.getSbzt() + ""); - faultRecord.setStartTime(DateUtil.formatDateTime(DateUtil.date())); - //faultRecord.setWarehouseId(mydoJob.getWarehouseId()); - basFaultRecordService.insertBasFaultRecord(faultRecord); - } - } - if (msgDdj.getSbzt() < 1000 && msgDdj.getCzfs() == 5){ - BasFaultRecord param = new BasFaultRecord(); - param.setDeviceId(String.valueOf(msgDdj.getId())); - param.setDeviceType("DDJ"); - param.setJobId("0"); - List basFaultRecords = basFaultRecordService.selectBasFaultRecordList(param); - if (CollUtil.isNotEmpty(basFaultRecords)) { - BasFaultRecord faultRecord = basFaultRecords.get(0); - faultRecord.setJobId("1"); - faultRecord.setFinishTime(DateUtil.formatDateTime(DateUtil.date())); - basFaultRecordService.updateBasFaultRecord(faultRecord); - } - } - } +// for (String ddjCode : PlcDdj2Read.deviceDdjMap.keySet()) { +// MsgDdj msgDdj = PlcDdj2Read.deviceDdjMap.get(ddjCode); +// msgDdjService.updateMsgDdj(msgDdj); +// +// if (msgDdj.getSbzt() > 1000) { +// BasFaultRecord param = new BasFaultRecord(); +// param.setTaskNo(msgDdj.getRwh() + ""); +// param.setDeviceId(String.valueOf(msgDdj.getId())); +// param.setDeviceType("DDJ"); +// param.setFault(msgDdj.getSbzt() + ""); +// param.setJobId("0"); +// List basFaultRecords = basFaultRecordService.selectBasFaultRecordList(param); +// if (CollUtil.isEmpty(basFaultRecords)) { +// BasFaultRecord faultRecord = new BasFaultRecord(); +// faultRecord.setId(IdUtil.fastSimpleUUID()); +// faultRecord.setDeviceId(String.valueOf(msgDdj.getId())); +// faultRecord.setDeviceName(msgDdj.getName()); +// faultRecord.setDeviceType("DDJ"); +// faultRecord.setJobId("0"); +// faultRecord.setTaskNo(msgDdj.getRwh() + ""); +// faultRecord.setFault(msgDdj.getSbzt() + ""); +// faultRecord.setStartTime(DateUtil.formatDateTime(DateUtil.date())); +// //faultRecord.setWarehouseId(mydoJob.getWarehouseId()); +// basFaultRecordService.insertBasFaultRecord(faultRecord); +// } +// } +// if (msgDdj.getSbzt() < 1000 && msgDdj.getCzfs() == 5){ +// BasFaultRecord param = new BasFaultRecord(); +// param.setDeviceId(String.valueOf(msgDdj.getId())); +// param.setDeviceType("DDJ"); +// param.setJobId("0"); +// List basFaultRecords = basFaultRecordService.selectBasFaultRecordList(param); +// if (CollUtil.isNotEmpty(basFaultRecords)) { +// BasFaultRecord faultRecord = basFaultRecords.get(0); +// faultRecord.setJobId("1"); +// faultRecord.setFinishTime(DateUtil.formatDateTime(DateUtil.date())); +// basFaultRecordService.updateBasFaultRecord(faultRecord); +// } +// } +// } try { Thread.sleep(1500); } catch (InterruptedException e) { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/LineSsjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/LineConvThread.java similarity index 98% rename from ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/LineSsjThread.java rename to ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/LineConvThread.java index 8dc6e12..fbab4c5 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/LineSsjThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/LineConvThread.java @@ -1,21 +1,17 @@ -package com.ruoyi.schedule.scheduleTask.ssj.floor2; +package com.ruoyi.schedule.scheduleTask.ssj; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.StrUtil; import com.ruoyi.api.service.IApiService; -import com.ruoyi.bas.port.domain.WcsPort; import com.ruoyi.bas.port.service.IWcsPortService; import com.ruoyi.common.core.domain.AjaxResult; -import com.ruoyi.common.domain.SendData; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.device.ssj.domain.DeviceSsj; import com.ruoyi.job.domain.MydoJob; import com.ruoyi.job.service.IMydoJobService; import com.ruoyi.queue.agv.domain.AgvQueue; import com.ruoyi.queue.agv.service.IAgvQueueService; -import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; -import com.ruoyi.schedule.plcRead.util.Tools; import lombok.extern.slf4j.Slf4j; import java.text.SimpleDateFormat; @@ -31,7 +27,7 @@ import static com.ruoyi.schedule.plcRead.ssj.PlcSsjRead.*; * 生产线线程 检测到位+托盘条码+托盘大小 请求wms生成入库作业 。 循环作业表,检测有没有出库作业 ,生成agv搬运作业。 */ @Slf4j -public class LineSsjThread implements Runnable { +public class LineConvThread implements Runnable { public HashMap> ssjCodeList; private IApiService apiService; 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 new file mode 100644 index 0000000..d6c2f15 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/PortConvThread.java @@ -0,0 +1,290 @@ +package com.ruoyi.schedule.scheduleTask.ssj; + +import cn.hutool.core.bean.BeanUtil; +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.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.device.ssj.domain.DeviceSsj; +import com.ruoyi.job.domain.JobCallBack; +import com.ruoyi.job.domain.MydoJob; +import com.ruoyi.job.service.IJobCallBackService; +import com.ruoyi.job.service.IMydoJobService; +import com.ruoyi.queue.agv.domain.AgvQueue; +import com.ruoyi.queue.agv.service.IAgvQueueService; +import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; +import lombok.extern.slf4j.Slf4j; + +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static com.ruoyi.common.TaskStatusCode.*; +import static com.ruoyi.schedule.plcRead.ssj.PlcSsjRead.writeToSsj; +import static com.ruoyi.schedule.plcRead.ssj.PlcSsjRead.writeToSsjQH; + +/** + * 出入口输送线线程 + */ +@Slf4j +public class PortConvThread implements Runnable { + + public HashMap> ssjCodeList; + + private IApiService apiService; + private IAgvQueueService agvQueueService; + private IMydoJobService mydoJobService; + private IJobCallBackService jobCallBackService; + + public boolean isRun = true; + + + public void init() { + ssjCodeList = new HashMap<>(); + ArrayList ssjCodes = new ArrayList<>(); + ssjCodes.add("G1004"); +// ssjCodes.add("L1003"); + ssjCodeList.put("portConv", ssjCodes); + apiService = SpringUtils.getBean(IApiService.class); + agvQueueService = SpringUtils.getBean(IAgvQueueService.class); + mydoJobService = SpringUtils.getBean(IMydoJobService.class); + jobCallBackService = SpringUtils.getBean(IJobCallBackService.class); + log.info("初始化服务 {},{}", apiService, agvQueueService); + } + + @Override + public void run() { + init(); + while (isRun) { + for (String type : ssjCodeList.keySet()) { + switch (type) { + case "portConv": + //入库口 + for (String ssjCode : ssjCodeList.get(type)) { + try { + if (PlcSsjRead.deviceSsjMap.containsKey(ssjCode)) { + inDispatch(PlcSsjRead.deviceSsjMap.get(ssjCode)); +// inDispatch1(PlcSsjRead.deviceSsjMap.get(ssjCode)); + } else { + log.error("设备不存在 ssjCode:{}", ssjCode); + } + } catch (RuntimeException e) { + log.error(e.getMessage(), e); + } + } + break; + } + } + try { + Thread.sleep(1500); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + } + + + public void inDispatch(DeviceSsj inSsjDevice) { + switch (inSsjDevice.getInOrOut()) { + //---------------------------入库模式--------------------------- + case 1: + //---------------------------入口取输送机(叉车取放货位置)--------------------------- + //【不空闲】、【输送到位】、【条码不为空】 + if (inSsjDevice.getKx() != 1 && inSsjDevice.getDw() == 1 && inSsjDevice.getTrayCode() != "") { + + //todo 外形校验 + + + //todo 称重校验 + + + //todo 条码校验 异常入库退回 + + + //请求参数 + //todo 核对请求wms接口参数数量 + HashMap paramMap = new HashMap<>(); + //托盘条码 + 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); + + //请求生成wcs任务 + AjaxResult ajaxResult = apiService.createInMydoJob(paramMap); + if (ajaxResult.isSuccess()) { + //获取wms下发的任务号和分配货位 + MydoJob mydoJob = BeanUtil.toBean(ajaxResult.get("data"), MydoJob.class); + + //todo wms分配的货位(排列层)校验 + if (mydoJob.getCargoSpaceId() == null) { + log.info("【请求参数异常】分配货位:null,托盘条码:{}",inSsjDevice.getTrayCode()); + return; + }else{ + + } + + mydoJob.setStatus("1"); + mydoJob.setInOrOut("1"); + mydoJob.setExecutionPhase(TASK_EP_CREATE); + mydoJob.setCreateTime(new Date()); +// mydoJob.setTraySize(Convert.toStr(inSsjDevice.getTraySize())); + mydoJob.setFaultFlag("0"); + 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()); + } + }else{ + //todo 向输送机下发退回 + int i = writeToSsj(inSsjDevice.getPlcDbWriteAddress(), "99", 99, 1); + + //todo 接口调用失败处理 + log.info("【请求入库】请求生成wcs作业失败退回,请重试"); + + } + } + break; + //---------------------------出库模式--------------------------- + case 2: + //出库到位 + if (inSsjDevice.getDw() == 1 && inSsjDevice.getTaskNo() > 0) { + //查询该出库任务 + MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(Convert.toLong(inSsjDevice.getTaskNo())); + if (mydoJob != null && Integer.parseInt(mydoJob.getInOrOut()) > 20) { + log.info("设备:{} 位置:{} 任务号:{} 出库到位", "输送线:", inSsjDevice.getDeviceCode(), mydoJob.getTaskNo()); + mydoJobService.insertHistory(mydoJob.getJobId()); + mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId()); + JobCallBack jobCallBack = new JobCallBack(); + jobCallBack.setType("2"); + jobCallBack.setMydojobId(mydoJob.getJobId()); + jobCallBack.setStatus("0"); + jobCallBack.setTaskNo(Convert.toLong(mydoJob.getTaskNo())); + jobCallBack.setCreateTime(new Date()); + jobCallBack.setSpare1("0"); + jobCallBackService.insertJobCallBack(jobCallBack); + } + } + break; + + } + + + + + + } + + + + + + public void inDispatch1(DeviceSsj ssjDevice) { + //有入库请求就肯定是电气的任务号的作业 + if(StrUtil.isNotBlank(ssjDevice.getTrayCode()) && ssjDevice.getRkqq()==1 && ssjDevice.getTaskNo()<1000){ + //,如果有正执行的出库作业退回 + MydoJob mydoJobParam = new MydoJob(); + mydoJobParam.setInOut("2"); + mydoJobParam.setStatus("3"); + mydoJobParam.setExitId(ssjDevice.getDeviceCode()); + List outMydoJobList = mydoJobService.selectInOrOutMydoJobList(mydoJobParam); + if(!outMydoJobList.isEmpty()){ + //todo 去向不明朗 + int i = writeToSsj(ssjDevice.getPlcDbWriteAddress(),"99",2,2); + if (i == 1) { + log.info(ssjDevice.getDeviceCode()+"有正执行的出库作业退回" ); + } + return; + } + + MydoJob mydoJob = new MydoJob(); + mydoJob.setInOrOut("1"); +// mydoJob.setStatus("1"); + String trayCode = ssjDevice.getTrayCode(); + //String[] split = trayCode.split("\\s+"); + String serial = findFirst(PATTERNS.get("SERIAL"), trayCode); + mydoJob.setTrayCode(serial); + mydoJob.setEntranceId(ssjDevice.getDeviceCode()); + List mydoJobs = mydoJobService.selectMydoJobList(mydoJob); + if(!mydoJobs.isEmpty()){ + MydoJob mydoJob1 = mydoJobs.get(0); + int i = writeToSsj(ssjDevice.getPlcDbWriteAddress(),mydoJob1.getTaskNo(),1,1); + if (i == 1) { + mydoJob1.setExecutionPhase(TASK_EP_SSJ); + mydoJob1.setStatus("3"); + mydoJobService.updateMydoJob(mydoJob1); + log.info(ssjDevice.getDeviceCode()+"输送机下发任务号成功:{}" , mydoJob1.getTaskNo()); + } + }else{ + HashMap map = new HashMap<>(); + map.put("trayCode",ssjDevice.getTrayCode()); + map.put("entranceId",ssjDevice.getDeviceCode()); + map.put("floor", "2"); + AjaxResult ajaxResult = apiService.selectMydoJobByTrayCodeAndEntranceId(map); + if(ajaxResult.isSuccess()){ + MydoJob mydoJob2 = BeanUtil.toBean(ajaxResult.get("data"), MydoJob.class); + mydoJob2.setStatus("1"); + mydoJob2.setExecutionPhase(TASK_EP_CREATE); + mydoJob2.setCreateTime(new Date()); + mydoJob2.setFaultFlag("0"); + mydoJob2.setPriority(Long.valueOf(10)); + mydoJobService.insertMydoJob(mydoJob2); + int i = writeToSsj(ssjDevice.getPlcDbWriteAddress(),mydoJob2.getTaskNo(),1,1); + if (i == 1) { + mydoJob2.setExecutionPhase(TASK_EP_SSJ); + mydoJob2.setStatus("3"); + mydoJobService.updateMydoJob(mydoJob2); + log.info(ssjDevice.getDeviceCode()+"输送机下发任务号成功:{}" , mydoJob2.getTaskNo()); + } + }else{ + //todo 去向不明朗 + int i = writeToSsj(ssjDevice.getPlcDbWriteAddress(),"99",2,2); + if (i == 1) { + log.info(ssjDevice.getDeviceCode()+"输送机没取到作业下发输送线" ); + } + } + } + } + + } + + private static final Map PATTERNS = createPatterns(); + + private static Map createPatterns() { + Map map = new LinkedHashMap<>(); + map.put("MODEL", Pattern.compile("MODEL:([^\\s]+)", Pattern.CASE_INSENSITIVE)); + map.put("COLOR", Pattern.compile("COLOR:([^\\s]+)", Pattern.CASE_INSENSITIVE)); + map.put("SERIAL", Pattern.compile("SERIAL:([^\\s]+)", Pattern.CASE_INSENSITIVE)); + map.put("V", Pattern.compile("V:([^\\s]+)", Pattern.CASE_INSENSITIVE)); + map.put("Hz", Pattern.compile("Hz:([^\\s]+)", Pattern.CASE_INSENSITIVE)); + map.put("PH", Pattern.compile("PH:([^\\s]+)", Pattern.CASE_INSENSITIVE)); + map.put("NW", Pattern.compile("N\\.W\\.:([^\\s]+)", Pattern.CASE_INSENSITIVE)); + map.put("GW", Pattern.compile("G\\.W\\.:([^\\s]+)", Pattern.CASE_INSENSITIVE)); + map.put("ITEM_CODE", Pattern.compile("ITEM_CODE:([^\\s]+)", Pattern.CASE_INSENSITIVE)); + map.put("@", Pattern.compile("@:([^\\s]+)", Pattern.CASE_INSENSITIVE)); + return map; + } + + private static String findFirst(Pattern pattern, String input) { + if (pattern == null || input == null) return null; + Matcher m = pattern.matcher(input); + return m.find() ? m.group(1) : null; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2RoadWaySsjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/RoadConvThread.java similarity index 93% rename from ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2RoadWaySsjThread.java rename to ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/RoadConvThread.java index c835086..b8b12c8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2RoadWaySsjThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/RoadConvThread.java @@ -1,4 +1,4 @@ -package com.ruoyi.schedule.scheduleTask.ssj.floor2; +package com.ruoyi.schedule.scheduleTask.ssj; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; @@ -11,11 +11,10 @@ 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.utils.spring.SpringUtils; -import com.ruoyi.job.domain.JobCallBack; +import com.ruoyi.device.ssj.domain.DeviceSsj; import com.ruoyi.job.domain.MydoJob; import com.ruoyi.job.service.IMydoJobService; import com.ruoyi.queue.agv.service.IAgvQueueService; -import com.ruoyi.device.ssj.domain.DeviceSsj; import com.ruoyi.queue.ddj.domain.DdjDeviceExecutionQueue; import com.ruoyi.queue.ddj.service.IDdjDeviceExecutionQueueService; import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; @@ -24,14 +23,13 @@ import lombok.extern.slf4j.Slf4j; import java.util.*; import static com.ruoyi.common.TaskStatusCode.*; -import static com.ruoyi.common.TaskType.*; -import static com.ruoyi.common.TaskType.DDJ_RWLX_2; +import static com.ruoyi.common.TaskType.DDJ_RWLX_1; /** - * 二楼出库线程 检测当前巷道有没有入库作业,没有作业,生成堆垛机出库队列 + * 巷道口输送机(堆垛机取放位)线程 检测当前巷道有没有入库作业,没有作业,生成堆垛机出库队列 */ @Slf4j -public class Floor2RoadWaySsjThread implements Runnable { +public class RoadConvThread implements Runnable { public HashMap> ssjCodeList; private final Map> roadwayMap = new HashMap<>(); @@ -46,17 +44,17 @@ public class Floor2RoadWaySsjThread implements Runnable { public void init() { ssjCodeList = new HashMap<>(); ArrayList ssjCodes = new ArrayList<>(); - ssjCodes.add("L1002"); - ssjCodes.add("L1004"); - ssjCodeList.put("roadwaySsj", ssjCodes); +// ssjCodes.add("L1002"); + ssjCodes.add("L1001"); + ssjCodeList.put("roadConv", ssjCodes); apiService = SpringUtils.getBean(IApiService.class); agvQueueService = SpringUtils.getBean(IAgvQueueService.class); mydoJobService = SpringUtils.getBean(IMydoJobService.class); basCargoSpaceService = SpringUtils.getBean(IBasCargoSpaceService.class); ddjDeviceExecutionQueueService = SpringUtils.getBean(IDdjDeviceExecutionQueueService.class); //初始化巷道口 排 列 层 - roadwayMap.put("L1002", Arrays.asList(2, 0, 1)); - roadwayMap.put("L1004", Arrays.asList(4, 0, 1)); + roadwayMap.put("L1001", Arrays.asList(2, 0, 1)); +// roadwayMap.put("L1004", Arrays.asList(4, 0, 1)); log.info("初始化服务 {},{}", apiService, agvQueueService); } @@ -65,9 +63,8 @@ public class Floor2RoadWaySsjThread implements Runnable { init(); while (isRun){ for (String type : ssjCodeList.keySet()) { - - switch ( type){ - case "roadwaySsj": + switch (type){ + case "roadConv": //生产线入库 for (String ssjCode : ssjCodeList.get(type)) { try { @@ -94,7 +91,7 @@ public class Floor2RoadWaySsjThread implements Runnable { public void inDispatch(DeviceSsj roadSsjDevice) { - //如果到位,且任务号大于0 + //巷道口到位,且任务号大于1000 if (roadSsjDevice.getDw()==1 && roadSsjDevice.getTaskNo()>1000) { MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(Convert.toLong(roadSsjDevice.getTaskNo())); if(ObjUtil.isNotNull(mydoJob)){ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1BothWayInSsjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1BothWayInSsjThread.java deleted file mode 100644 index 0da880e..0000000 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1BothWayInSsjThread.java +++ /dev/null @@ -1,270 +0,0 @@ -package com.ruoyi.schedule.scheduleTask.ssj.floor1; - -import cn.hutool.core.bean.BeanUtil; -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 cn.hutool.core.util.ObjUtil; -import cn.hutool.core.util.StrUtil; -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.utils.spring.SpringUtils; -import com.ruoyi.device.ssj.domain.DeviceSsj; -import com.ruoyi.job.domain.MydoJob; -import com.ruoyi.job.service.IMydoJobService; -import com.ruoyi.queue.ddj.domain.DdjDeviceExecutionQueue; -import com.ruoyi.queue.ddj.service.IDdjDeviceExecutionQueueService; -import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; -import lombok.extern.slf4j.Slf4j; - -import java.util.*; - -import static com.ruoyi.common.TaskStatusCode.*; -import static com.ruoyi.common.TaskType.DDJ_RWLX_3; -import static com.ruoyi.schedule.plcRead.ssj.PlcSsjRead.writeToSsj; - -/** - * 一楼双向线体入库线程 条码+到位+无出库作业 下发去向+任务号 有出库作业就下发退回 - */ - -@Slf4j -public class Floor1BothWayInSsjThread implements Runnable { - - public HashMap ssjCodeList; - - private IApiService apiService; - private IMydoJobService mydoJobService; - private IBasCargoSpaceService basCargoSpaceService; - private IDdjDeviceExecutionQueueService ddjDeviceExecutionQueueService; - private final Map> roadwayMap = new HashMap<>(); - private final Map exitRoadwayMap = new HashMap<>(); - - - public boolean isRun = true; - - - public void init() { - ssjCodeList = new HashMap<>(); - ssjCodeList.put("roadway1", PlcSsjRead.deviceSsjMap.get("L2003")); - ssjCodeList.put("roadway2", PlcSsjRead.deviceSsjMap.get("L2005")); - ssjCodeList.put("in1", PlcSsjRead.deviceSsjMap.get("L2004")); - ssjCodeList.put("in2", PlcSsjRead.deviceSsjMap.get("L2006")); - - - apiService = SpringUtils.getBean(IApiService.class); - mydoJobService = SpringUtils.getBean(IMydoJobService.class); - basCargoSpaceService = SpringUtils.getBean(IBasCargoSpaceService.class); - ddjDeviceExecutionQueueService = SpringUtils.getBean(IDdjDeviceExecutionQueueService.class); - - - //初始化巷道口 排 列 层 - roadwayMap.put("L2003", Arrays.asList(2, 47, 1)); - roadwayMap.put("L2005", Arrays.asList(3, 70, 1)); - - exitRoadwayMap.put("L2003", "L2004"); - exitRoadwayMap.put("L2005", "L2006"); - - } - - @Override - public void run() { - init(); - while (isRun) { - - for (String type : ssjCodeList.keySet()) { - switch (type) { - case "roadway1": - case "roadway2": - dispatch1(ssjCodeList.get(type)); - break; - case "in1": - case "in2": - dispatch2(ssjCodeList.get(type)); - break; - } - } - try { - Thread.sleep(1500); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - - } - - private void dispatch1(DeviceSsj ssj) { - if (ssj.getDw() == 1 && ssj.getTaskNo() > 1000) { - int taskNo = ssj.getTaskNo(); - MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(Convert.toLong(taskNo)); - if(ObjUtil.isNotNull(mydoJob) && Convert.toInt(mydoJob.getInOrOut()) < 20){ - if (TASK_STATUS_CREATE.equals(mydoJob.getStatus()) - && TASK_EP_SSJ.equals(mydoJob.getExecutionPhase())) { - //修改作业执行状态 - mydoJob.setStatus(TASK_STATUS_RUNNING); - mydoJob.setStartTime(DateUtil.formatDateTime(DateUtil.date())); - mydoJobService.updateMydoJob(mydoJob); - } - if(mydoJob.getCargoSpaceId() == null || "".equals(mydoJob.getCargoSpaceId())){ - AjaxResult ajaxResult = apiService.requestWmsSpace(mydoJob); - if(ajaxResult.isSuccess()){ - BasCargoSpace space = BeanUtil.toBean(ajaxResult.get("data"), BasCargoSpace.class); - String cargoSpaceId = space.getCargoSpaceId(); - mydoJob.setCargoSpaceId(cargoSpaceId); - mydoJobService.updateMydoJob(mydoJob); - } - } - if(mydoJob.getCargoSpaceId()!=null && !"".equals(mydoJob.getCargoSpaceId())){ - if(mydoJob.getExecutionPhase().equals(TASK_EP_SSJ)){ - mydoJob.setExecutionPhase(TASK_EP_ROADWAY_SSJ); - mydoJobService.updateMydoJob(mydoJob); - } - - if(mydoJob.getExecutionPhase().equals(TASK_EP_ROADWAY_SSJ)){ - List ddjDeviceExecutionQueues = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueListByRwlx(DDJ_RWLX_3, Convert.toInt(mydoJob.getRoadwayId())); - BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByWmsCargoSpaceId(mydoJob.getCargoSpaceId()); - List pclList = roadwayMap.get(ssj.getDeviceCode()); - if (CollUtil.isEmpty(ddjDeviceExecutionQueues) && ObjUtil.isNotNull(basCargoSpace) && CollUtil.isNotEmpty(pclList)) { - DdjDeviceExecutionQueue ddjDeviceExecutionQueue = new DdjDeviceExecutionQueue(); - ddjDeviceExecutionQueue.setUuid(IdUtil.simpleUUID()); - ddjDeviceExecutionQueue.setRwh(Convert.toLong(mydoJob.getTaskNo())); - ddjDeviceExecutionQueue.setDevName(mydoJob.getRoadwayId()); - ddjDeviceExecutionQueue.setDevId(Convert.toInt(mydoJob.getRoadwayId())); - ddjDeviceExecutionQueue.setRwzt(0); - ddjDeviceExecutionQueue.setYph(pclList.get(0)); - ddjDeviceExecutionQueue.setYlh(pclList.get(1)); - ddjDeviceExecutionQueue.setYch(pclList.get(2)); - 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.setSpare1(mydoJob.getTraySize()); - ddjDeviceExecutionQueue.setScsj(DateUtil.formatDateTime(DateUtil.date())); - ddjDeviceExecutionQueue.setRwlx(DDJ_RWLX_3); - ddjDeviceExecutionQueueService.insertDdjDeviceExecutionQueue(ddjDeviceExecutionQueue); - - mydoJob.setExecutionPhase(TASK_EP_DDJ); - mydoJobService.updateMydoJob(mydoJob); - } - } - } - } - } - } - - private void dispatch2(DeviceSsj ssj) { - if (ssj.getRkqq() == 1 && ssj.getTaskNo() > 0 && ssj.getTaskNo() < 1000 && StrUtil.isEmpty(ssj.getTrayCode())) { - //先检测有没有出库作业,有出库作业直接退回 - MydoJob outMydoJob = mydoJobService.selectRunningMydoJobByExitList(Collections.singletonList(ssj.getDeviceCode())); - if (ObjUtil.isNotNull(outMydoJob)) { - //下发去向 和任务号 - int i = writeToSsj(ssj.getPlcDbWriteAddress(), "99", 2, 2); - if (i == 1) { - log.info("当前输送机有出库任务下发退回 rwh:{},qx:{},trayCode:{}", ssj.getTaskNo(), 2, ssj.getTrayCode()); - } - } else { - if (StrUtil.isNotBlank(ssj.getTrayCode())) { - MydoJob param = new MydoJob(); - param.setEntranceId(ssj.getDeviceCode()); - String[] split = ssj.getTrayCode().split(" "); - String serial = split[2].substring(7); - param.setTrayCode(serial); - List mydoJobs = mydoJobService.selectMydoJobList(param); - MydoJob inJob = null; - if (CollUtil.isNotEmpty(mydoJobs)) { - inJob = mydoJobs.get(0); - } else { - //根据托盘码请求入库作业 - HashMap paramMap = new HashMap<>(); - paramMap.put("trayCode", ssj.getTrayCode()); - paramMap.put("floor", "1"); - paramMap.put("entranceId",ssj.getDeviceCode()); - AjaxResult result = apiService.selectMydoJobByTrayCodeAndEntranceId(paramMap); - if (result.isSuccess()) { - inJob = BeanUtil.toBean(result.get("data"), MydoJob.class); - inJob.setStatus(TASK_STATUS_CREATE); - inJob.setExecutionPhase(TASK_EP_CREATE); - inJob.setFaultFlag("0"); - inJob.setPriority(Long.valueOf(10)); - mydoJobService.insertMydoJob(inJob); - log.info("托盘码请求作业成功, rwh:{},trayCode:{}", ssj.getTaskNo(), ssj.getTrayCode()); - }else{ - //下发去向 和任务号 - int i = writeToSsj(ssj.getPlcDbWriteAddress(), "99", 2, 2); - if (i == 1) { - log.info("托盘码请求作业失败, rwh:{},qx:{},trayCode:{}", ssj.getTaskNo(), 2, ssj.getTrayCode()); - } - } - } - if (inJob != null) { - //下发去向 和任务号 - int i = writeToSsj(ssj.getPlcDbWriteAddress(), inJob.getTaskNo(), 1, 1); - if (i == 1) { - inJob.setStatus(TASK_STATUS_RUNNING); - inJob.setExecutionPhase(TASK_EP_SSJ); - inJob.setStartTime(DateUtil.formatDateTime(DateUtil.date())); - inJob.setTargetRoadwayId(Convert.toStr(1)); - mydoJobService.updateMydoJob(inJob); - log.info("托盘码请求作业成功,下发任务号 rwh:{},qx:{},trayCode:{}", ssj.getTaskNo(), 1, ssj.getTrayCode()); - } - }else{ - //下发去向 和任务号 - int i = writeToSsj(ssj.getPlcDbWriteAddress(), "99", 2, 2); - if (i == 1) { - log.info("托盘码请求作业失败,下发回退 rwh:{},qx:{},trayCode:{}", ssj.getTaskNo(), 2, ssj.getTrayCode()); - } - } - } -// else { -// //查询下发的任务 -// MydoJob param = new MydoJob(); -// ArrayList epList = new ArrayList<>(); -// epList.add(TASK_EP_CREATE); -// epList.add(TASK_EP_SSJ); -// param.setEpList(epList); -// param.setStatus(TASK_STATUS_CREATE); -// param.setEntranceId(ssj.getDeviceCode()); -// List mydoJobs = mydoJobService.selectMydoJobList(param); -// if (CollUtil.isNotEmpty(mydoJobs)){ -// //已请求wms,生成任务,二次下发 -// MydoJob mydoJob = mydoJobs.get(0); -// int i = writeToSsj(ssj.getPlcDbWriteAddress(),mydoJob.getTaskNo(),1,1); -// if (i == 1) { -// mydoJob.setExecutionPhase(TASK_EP_SSJ); -// mydoJobService.updateMydoJob(mydoJob); -// log.info("{}无条码请求作业,二次下发任务号{}:",ssj.getDeviceCode(),mydoJob.getTaskNo()); -// } -// }else { -// //不存在扫不到托盘码的任务 -// HashMap paramMap = new HashMap<>(); -// paramMap.put("entranceId",ssj.getDeviceCode()); -// AjaxResult ajaxResult = apiService.selectMydoJobByNoTrayCode(paramMap); -// if (ajaxResult.isSuccess()) { -// MydoJob mydoJob2 = BeanUtil.toBean(ajaxResult.get("data"), MydoJob.class); -// mydoJob2.setExecutionPhase(TASK_EP_CREATE); -// mydoJob2.setFaultFlag("0"); -// mydoJobService.insertMydoJob(mydoJob2); -// int i = writeToSsj(ssj.getPlcDbWriteAddress(),mydoJob2.getTaskNo(),1,1); -// if (i == 1) { -// mydoJob2.setExecutionPhase(TASK_EP_SSJ); -// mydoJobService.updateMydoJob(mydoJob2); -// log.info("{}无条码请求作业成功,下发任务号{}:",ssj.getDeviceCode(),mydoJob2.getTaskNo()); -// } -// } else if (ajaxResult.isError()) { -// //超大,给plc下发错误信息,等待人工处理 -// //托盘大小对不上,给plc下发错误信息,等待人工处理 -// //码不对,给plc下发错误信息,等待人工处理 -// int i = writeToSsj(ssj.getPlcDbWriteAddress(), "99", Integer.parseInt(ajaxResult.get("code").toString()), 2); -// if (i == 1) { -// log.info("{}无条码请求作业失败,下发退回{}:",ssj.getDeviceCode(),Integer.parseInt(ajaxResult.get("code").toString())); -// } -// } -// } -// } - } - } - } -} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1BothWayOutSsjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1BothWayOutSsjThread.java deleted file mode 100644 index 920a175..0000000 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1BothWayOutSsjThread.java +++ /dev/null @@ -1,214 +0,0 @@ -package com.ruoyi.schedule.scheduleTask.ssj.floor1; - -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 cn.hutool.core.util.ObjUtil; -import com.ruoyi.api.service.IApiService; -import com.ruoyi.bas.cargospace.domain.BasCargoSpace; -import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService; -import com.ruoyi.common.utils.spring.SpringUtils; -import com.ruoyi.device.ssj.domain.DeviceSsj; -import com.ruoyi.job.domain.JobCallBack; -import com.ruoyi.job.domain.MydoJob; -import com.ruoyi.job.service.IJobCallBackService; -import com.ruoyi.job.service.IMydoJobService; -import com.ruoyi.queue.agv.service.IAgvQueueService; -import com.ruoyi.queue.ddj.domain.DdjDeviceExecutionQueue; -import com.ruoyi.queue.ddj.service.IDdjDeviceExecutionQueueService; -import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; -import lombok.extern.slf4j.Slf4j; - -import java.util.*; - -import static com.ruoyi.common.TaskStatusCode.*; -import static com.ruoyi.common.TaskType.DDJ_RWLX_2; -import static com.ruoyi.common.TaskType.DDJ_RWLX_3; - -/** - * 一楼双向线体出库线程 循环盘点出库作业+巷道口空闲+出库线体全部空闲+无入库作业 生成堆垛机出库队列 - */ - -@Slf4j -public class Floor1BothWayOutSsjThread implements Runnable { - - public HashMap> ssjCodeList; - - private IMydoJobService mydoJobService; - private IBasCargoSpaceService basCargoSpaceService; - private IDdjDeviceExecutionQueueService ddjDeviceExecutionQueueService; - private final Map> roadwayMap = new HashMap<>(); - private IJobCallBackService jobCallBackService; - - public boolean isRun = true; - - - public void init() { - ssjCodeList = new HashMap<>(); - ArrayList roadway1 = new ArrayList<>(); - roadway1.add(PlcSsjRead.deviceSsjMap.get("L2003")); - ssjCodeList.put("roadway1", roadway1); - ArrayList roadway2 = new ArrayList<>(); - roadway2.add(PlcSsjRead.deviceSsjMap.get("L2005")); - ssjCodeList.put("roadway2", roadway2); - - ArrayList out1 = new ArrayList<>(); - out1.add(PlcSsjRead.deviceSsjMap.get("L2004")); - ssjCodeList.put("out1", out1); - ArrayList out2 = new ArrayList<>(); - out2.add(PlcSsjRead.deviceSsjMap.get("L2006")); - ssjCodeList.put("out2", out2); - - ArrayList roadway1Both = new ArrayList<>(); - roadway1Both.add(PlcSsjRead.deviceSsjMap.get("L2001")); - ssjCodeList.put("roadway1Both", roadway1Both); - - ArrayList roadway2Both = new ArrayList<>(); - roadway2Both.add(PlcSsjRead.deviceSsjMap.get("L2007")); - ssjCodeList.put("roadway2Both", roadway2Both); - - mydoJobService = SpringUtils.getBean(IMydoJobService.class); - basCargoSpaceService = SpringUtils.getBean(IBasCargoSpaceService.class); - ddjDeviceExecutionQueueService = SpringUtils.getBean(IDdjDeviceExecutionQueueService.class); - jobCallBackService = SpringUtils.getBean(IJobCallBackService.class); - - - //初始化巷道口 排 列 层 - roadwayMap.put("L2003", Arrays.asList(2, 47, 1)); - roadwayMap.put("L2005", Arrays.asList(3, 70, 1)); - } - - @Override - public void run() { - init(); - while (isRun) { - for (String type : ssjCodeList.keySet()) { - - switch (type) { - case "roadway1": - dispatch(ssjCodeList.get(type)); - break; - case "roadway2": - dispatch(ssjCodeList.get(type)); - break; - case "out1": - dispatch1(ssjCodeList.get(type)); - break; - case "out2": - dispatch1(ssjCodeList.get(type)); - break; - } - - } - try { - Thread.sleep(1500); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - - } - - private void dispatch1(List ssjList) { - for (DeviceSsj ssj : ssjList) { - - if (ssj.getTaskNo2() > 0) { - MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(Convert.toLong(ssj.getTaskNo2())); - if(mydoJob != null && Convert.toInt(mydoJob.getInOrOut()) > 20){ - if (ObjUtil.isNotNull(mydoJob) && mydoJob.getExecutionPhase().equals(TASK_EP_ROADWAY_SSJ)) { - mydoJob.setExecutionPhase(TASK_EP_SSJ); - mydoJobService.updateMydoJob(mydoJob); - } - if (ObjUtil.isNotNull(mydoJob) && mydoJob.getExecutionPhase().equals(TASK_EP_SSJ)) { - JobCallBack jobCallBack = new JobCallBack(); - jobCallBack.setType("2"); - jobCallBack.setMydojobId(mydoJob.getJobId()); - jobCallBack.setStatus("0"); - jobCallBack.setTaskNo(Convert.toLong(mydoJob.getTaskNo())); - jobCallBack.setCreateTime(new Date()); - jobCallBack.setSpare1("0"); - jobCallBackService.insertJobCallBack(jobCallBack); - - log.info("完成任务 taskNo{} ", mydoJob.getTaskNo()); - mydoJob.setStatus(TASK_STATUS_FINISH); - mydoJob.setExecutionPhase(TASK_EP_WMS_FINISH); - mydoJob.setFinishTime(DateUtil.formatDateTime(new Date())); - mydoJobService.updateMydoJob(mydoJob); - mydoJobService.insertHistory(mydoJob.getJobId()); - mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId()); - } - } - } - } - } - - /** - * 出库堆垛机队列生成 - */ - public void dispatch(List ssjList) { - DeviceSsj deviceSsj = ssjList.get(0); - DeviceSsj ssj = new DeviceSsj(); - DeviceSsj inOutSsj = new DeviceSsj(); - String roadwayId = ""; - String entrance_id = ""; - if ("L2003".equals(deviceSsj.getDeviceCode())) { - roadwayId = "1"; - ssj = ssjCodeList.get("roadway1Both").get(0); - entrance_id = "L2004"; - inOutSsj = PlcSsjRead.deviceSsjMap.get("L2004"); - - } - if("L2005".equals(deviceSsj.getDeviceCode())) { - roadwayId = "2"; - ssj = ssjCodeList.get("roadway2Both").get(0); - entrance_id = "L2006"; - inOutSsj = PlcSsjRead.deviceSsjMap.get("L2006"); - } - - MydoJob mydoJob = mydoJobService.selectMydoJobByExitList1("1", roadwayId); - MydoJob inJob = mydoJobService.selectMydoJobByEntranceList1(entrance_id); -// log.info("输送线"+deviceSsj.getDeviceCode()+"空闲:"+ deviceSsj.getKx()+"任务号:"+deviceSsj.getTaskNo()); -// log.info("输送线"+inOutSsj.getDeviceCode()+"入出库模式:"+ inOutSsj.getInOrOut()); - if (ObjUtil.isNotNull(mydoJob) && deviceSsj.getKx() == 1 && ssj.getKx() == 0 - && ObjUtil.isNull(inJob) && inOutSsj.getInOrOut() == 1 && deviceSsj.getTaskNo() == 0) { - //所有线体为空闲 并且存在出库作业 并且不存在入库作业 - BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByWmsCargoSpaceId(mydoJob.getCargoSpaceId()); - if (ObjUtil.isNull(basCargoSpace)) { - log.error("货位不存在 cargoSpaceId{}", mydoJob.getCargoSpaceId()); - } else { - //生成队列 - List list = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueListByRwlx(DDJ_RWLX_2, Convert.toInt(mydoJob.getRoadwayId())); - List pclList = roadwayMap.get(ssjList.get(0).getDeviceCode()); - if (CollUtil.isEmpty(list) && CollUtil.isNotEmpty(pclList)) { - DdjDeviceExecutionQueue ddjDeviceExecutionQueue = new DdjDeviceExecutionQueue(); - ddjDeviceExecutionQueue.setUuid(IdUtil.simpleUUID()); - ddjDeviceExecutionQueue.setRwh(Convert.toLong(mydoJob.getTaskNo())); - ddjDeviceExecutionQueue.setDevName(mydoJob.getRoadwayId()); - ddjDeviceExecutionQueue.setDevId(Convert.toInt(mydoJob.getRoadwayId())); - ddjDeviceExecutionQueue.setRwzt(0); - ddjDeviceExecutionQueue.setYph(Convert.toInt(basCargoSpace.getThePlatoon())); - ddjDeviceExecutionQueue.setYlh(Convert.toInt(basCargoSpace.getTheColumn())); - ddjDeviceExecutionQueue.setYch(Convert.toInt(basCargoSpace.getTheFloor())); - ddjDeviceExecutionQueue.setMbph(pclList.get(0)); - ddjDeviceExecutionQueue.setMblh(pclList.get(1)); - ddjDeviceExecutionQueue.setMbch(pclList.get(2)); - ddjDeviceExecutionQueue.setDdjxf("0"); - ddjDeviceExecutionQueue.setMlfs(5); - ddjDeviceExecutionQueue.setSpare1(mydoJob.getTraySize()); - ddjDeviceExecutionQueue.setScsj(DateUtil.formatDateTime(DateUtil.date())); - ddjDeviceExecutionQueue.setRwlx(DDJ_RWLX_2); - ddjDeviceExecutionQueueService.insertDdjDeviceExecutionQueue(ddjDeviceExecutionQueue); - - mydoJob.setStatus(TASK_STATUS_RUNNING); - mydoJob.setExecutionPhase(TASK_EP_DDJ); - mydoJob.setStartTime(DateUtil.formatDateTime(DateUtil.date())); - mydoJob.setExitId(entrance_id); - mydoJobService.updateMydoJob(mydoJob); - } - } - - } - } - -} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1SingleSsjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1SingleSsjThread.java deleted file mode 100644 index 3b56e42..0000000 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor1/Floor1SingleSsjThread.java +++ /dev/null @@ -1,202 +0,0 @@ -package com.ruoyi.schedule.scheduleTask.ssj.floor1; - -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 cn.hutool.core.util.ObjUtil; -import com.ruoyi.api.service.IApiService; -import com.ruoyi.bas.cargospace.domain.BasCargoSpace; -import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService; -import com.ruoyi.common.utils.spring.SpringUtils; -import com.ruoyi.device.ssj.domain.DeviceSsj; -import com.ruoyi.job.domain.JobCallBack; -import com.ruoyi.job.domain.MydoJob; -import com.ruoyi.job.service.IJobCallBackService; -import com.ruoyi.job.service.IMydoJobService; -import com.ruoyi.queue.ddj.domain.DdjDeviceExecutionQueue; -import com.ruoyi.queue.ddj.service.IDdjDeviceExecutionQueueService; -import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; -import lombok.extern.slf4j.Slf4j; - -import java.util.*; - -import static com.ruoyi.common.TaskStatusCode.*; -import static com.ruoyi.common.TaskType.DDJ_RWLX_2; - -/** - * 一楼单向出库线程 循环出库作业+巷道口空闲 生成堆垛机出库队列 - */ -@Slf4j -public class Floor1SingleSsjThread implements Runnable { - - public HashMap> ssjCodeList; - private IMydoJobService mydoJobService; - public boolean isRun = true; - private final Map exitRoadwayMap = new HashMap<>(); - private IDdjDeviceExecutionQueueService ddjDeviceExecutionQueueService; - private IBasCargoSpaceService basCargoSpaceService; - private final Map> roadwayMap = new HashMap<>(); - private IJobCallBackService jobCallBackService; - - - public void init() { - //设置要循环的输送机 - ssjCodeList = new HashMap<>(); - ArrayList outRoadwaySsjList = new ArrayList<>(); - outRoadwaySsjList.add("L2001"); - outRoadwaySsjList.add("L2007"); - ssjCodeList.put("outRoadwaySsj", outRoadwaySsjList); - ArrayList outSsjList = new ArrayList<>(); - outSsjList.add("L2002"); - outSsjList.add("L2008"); - ssjCodeList.put("outSsj", outSsjList); - - - //初始化服务 - mydoJobService = SpringUtils.getBean(IMydoJobService.class); - ddjDeviceExecutionQueueService = SpringUtils.getBean(IDdjDeviceExecutionQueueService.class); - basCargoSpaceService = SpringUtils.getBean(IBasCargoSpaceService.class); - jobCallBackService = SpringUtils.getBean(IJobCallBackService.class); - - - //初始化出口和巷道口映射关系 - exitRoadwayMap.put("L2001", "L2002"); - exitRoadwayMap.put("L2007", "L2008"); - - //初始化巷道口 排 列 层 - roadwayMap.put("L2001", Arrays.asList(1, 47, 1)); - roadwayMap.put("L2007", Arrays.asList(4, 70, 1)); - } - - @Override - public void run() { - init(); - while (isRun) { - try { - if (PlcSsjRead.deviceSsjMap.containsKey("L2001")) { - dispatch(PlcSsjRead.deviceSsjMap.get("L2001")); - } else { - log.error("设备不存在 ssjCode{}", "L2001"); - } - if (PlcSsjRead.deviceSsjMap.containsKey("L2007")) { - dispatch(PlcSsjRead.deviceSsjMap.get("L2007")); - } else { - log.error("设备不存在 ssjCode{}", "L2007"); - } - if (PlcSsjRead.deviceSsjMap.containsKey("L2002")) { - dispatch2(PlcSsjRead.deviceSsjMap.get("L2002")); - } else { - log.error("设备不存在 ssjCode{}", "L2002"); - } - if (PlcSsjRead.deviceSsjMap.containsKey("L2008")) { - dispatch2(PlcSsjRead.deviceSsjMap.get("L2008")); - } else { - log.error("设备不存在 ssjCode{}", "L2008"); - } - - } catch (RuntimeException e) { - log.error(e.getMessage(), e); - } - - try { - Thread.sleep(1500); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - - } - - /** - * 一楼单向出库口调度 - * - * @param ssj 输送机 - */ - private void dispatch2(DeviceSsj ssj) { - if (ssj.getTaskNo() > 0) { - MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(Convert.toLong(ssj.getTaskNo())); - if (ObjUtil.isNotNull(mydoJob) && Convert.toInt(mydoJob.getInOrOut()) > 20) { - mydoJob.setExecutionPhase(TASK_EP_SSJ); - mydoJobService.updateMydoJob(mydoJob); - JobCallBack jobCallBack = new JobCallBack(); - jobCallBack.setType("2"); - jobCallBack.setMydojobId(mydoJob.getJobId()); - jobCallBack.setStatus("0"); - jobCallBack.setTaskNo(Convert.toLong(mydoJob.getTaskNo())); - jobCallBack.setCreateTime(new Date()); - jobCallBack.setSpare1("0"); - jobCallBackService.insertJobCallBack(jobCallBack); - log.info("完成任务 taskNo{} ", mydoJob.getTaskNo()); - mydoJob.setStatus(TASK_STATUS_FINISH); - mydoJob.setFinishTime(DateUtil.formatDateTime(new Date())); - mydoJob.setExecutionPhase(TASK_EP_WMS_FINISH); - mydoJobService.updateMydoJob(mydoJob); - mydoJobService.insertHistory(mydoJob.getJobId()); - mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId()); - } - } - } - - /** - * 一楼单向巷道口调度 - * - * @param ssj 输送机 - */ - public void dispatch(DeviceSsj ssj) { - //如果入库请求1 并且 托盘码不为空 - if (ssj.getKx() == 1 && ssj.getTaskNo() == 0) { - - String roadwayId = ""; - String entrance_id = ""; - if("L2001".equals(ssj.getDeviceCode())){ - roadwayId = "1"; - entrance_id = "L2002"; - - } - if("L2007".equals(ssj.getDeviceCode())){ - roadwayId = "2"; - entrance_id = "L2008"; - } - MydoJob mydoJob = mydoJobService.selectMydoJobByExitList1("1",roadwayId); - if (ObjUtil.isNotNull(mydoJob)) { - BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByWmsCargoSpaceId(mydoJob.getCargoSpaceId()); - if (ObjUtil.isNull(basCargoSpace)) { - log.error("货位不存在 cargoSpaceId{}", mydoJob.getCargoSpaceId()); - } else { - //生成队列 - List list = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueListByRwlx(DDJ_RWLX_2, Convert.toInt(mydoJob.getRoadwayId())); - List pclList = roadwayMap.get(ssj.getDeviceCode()); - if (CollUtil.isEmpty(list) && CollUtil.isNotEmpty(pclList)) { - DdjDeviceExecutionQueue ddjDeviceExecutionQueue = new DdjDeviceExecutionQueue(); - ddjDeviceExecutionQueue.setUuid(IdUtil.simpleUUID()); - ddjDeviceExecutionQueue.setRwh(Convert.toLong(mydoJob.getTaskNo())); - ddjDeviceExecutionQueue.setDevName(mydoJob.getRoadwayId()); - ddjDeviceExecutionQueue.setDevId(Convert.toInt(mydoJob.getRoadwayId())); - ddjDeviceExecutionQueue.setRwzt(0); - ddjDeviceExecutionQueue.setYph(Convert.toInt(basCargoSpace.getThePlatoon())); - ddjDeviceExecutionQueue.setYlh(Convert.toInt(basCargoSpace.getTheColumn())); - ddjDeviceExecutionQueue.setYch(Convert.toInt(basCargoSpace.getTheFloor())); - ddjDeviceExecutionQueue.setMbph(pclList.get(0)); - ddjDeviceExecutionQueue.setMblh(pclList.get(1)); - ddjDeviceExecutionQueue.setMbch(pclList.get(2)); - ddjDeviceExecutionQueue.setDdjxf("0"); - ddjDeviceExecutionQueue.setMlfs(5); - ddjDeviceExecutionQueue.setSpare1(mydoJob.getTraySize()); - ddjDeviceExecutionQueue.setScsj(DateUtil.formatDateTime(DateUtil.date())); - ddjDeviceExecutionQueue.setRwlx(DDJ_RWLX_2); - ddjDeviceExecutionQueueService.insertDdjDeviceExecutionQueue(ddjDeviceExecutionQueue); - - //修改作业状态 - mydoJob.setStatus(TASK_STATUS_RUNNING); - mydoJob.setExecutionPhase(TASK_EP_DDJ); - mydoJob.setStartTime(DateUtil.formatDateTime(DateUtil.date())); - mydoJob.setExitId(entrance_id); - mydoJobService.updateMydoJob(mydoJob); - } - } - } - } - } - -} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2InOutSsjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2InOutSsjThread.java deleted file mode 100644 index e3d43e0..0000000 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/floor2/Floor2InOutSsjThread.java +++ /dev/null @@ -1,350 +0,0 @@ -package com.ruoyi.schedule.scheduleTask.ssj.floor2; - -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.convert.Convert; -import cn.hutool.core.util.StrUtil; -import com.ruoyi.api.service.IApiService; -import com.ruoyi.common.core.domain.AjaxResult; -import com.ruoyi.common.utils.spring.SpringUtils; -import com.ruoyi.device.ssj.domain.DeviceSsj; -import com.ruoyi.job.domain.JobCallBack; -import com.ruoyi.job.domain.MydoJob; -import com.ruoyi.job.service.IJobCallBackService; -import com.ruoyi.job.service.IMydoJobService; -import com.ruoyi.queue.agv.domain.AgvQueue; -import com.ruoyi.queue.agv.service.IAgvQueueService; -import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead; -import lombok.extern.slf4j.Slf4j; - -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import static com.ruoyi.common.TaskStatusCode.*; -import static com.ruoyi.schedule.plcRead.ssj.PlcSsjRead.writeToSsj; -import static com.ruoyi.schedule.plcRead.ssj.PlcSsjRead.writeToSsjQH; - -/** - * 二楼出入口输送线线程 - */ -@Slf4j -public class Floor2InOutSsjThread implements Runnable { - - public HashMap> ssjCodeList; - - private IApiService apiService; - private IAgvQueueService agvQueueService; - private IMydoJobService mydoJobService; - private IJobCallBackService jobCallBackService; - - public boolean isRun = true; - - - public void init() { - ssjCodeList = new HashMap<>(); - ArrayList ssjCodes = new ArrayList<>(); - ssjCodes.add("L1001"); - ssjCodes.add("L1003"); - ssjCodeList.put("inout", ssjCodes); - apiService = SpringUtils.getBean(IApiService.class); - agvQueueService = SpringUtils.getBean(IAgvQueueService.class); - mydoJobService = SpringUtils.getBean(IMydoJobService.class); - jobCallBackService = SpringUtils.getBean(IJobCallBackService.class); - log.info("初始化服务 {},{}", apiService, agvQueueService); - } - - @Override - public void run() { - init(); - while (isRun) { - for (String type : ssjCodeList.keySet()) { - - switch (type) { - case "inout": - //入库口 - for (String ssjCode : ssjCodeList.get(type)) { - try { - if (PlcSsjRead.deviceSsjMap.containsKey(ssjCode)) { - inDispatch(PlcSsjRead.deviceSsjMap.get(ssjCode)); - inDispatch1(PlcSsjRead.deviceSsjMap.get(ssjCode)); - } else { - log.error("设备不存在 ssjCode{}", ssjCode); - } - } catch (RuntimeException e) { - log.error(e.getMessage(), e); - } - } - break; - } - } - try { - Thread.sleep(1500); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - - } - - - public void inDispatch(DeviceSsj inSsjDevice) { - //如果输送机空闲 - if (inSsjDevice.getKx() == 1) { - AgvQueue agvQueue = new AgvQueue(); - - //临时处理 收到AGV取货完成,给放货输送机下发切换导向 - agvQueue.setStatus("5");//请求放货 - //agvQueue.setStatus("4"); - //todo 与agv对点 - agvQueue.setPositionCode2(inSsjDevice.getDeviceCode()); - List agvQueues = agvQueueService.selectAgvQueueList1(agvQueue); - //不允许放货 等着 - if (!agvQueues.isEmpty() && inSsjDevice.getAllowPut() == 0 && "L1001".equals(inSsjDevice.getDeviceCode())) { - //下发输送线切换导向 DB未知 - int i = writeToSsjQH("DB802.106", Integer.parseInt(agvQueues.get(0).getCtnrCode())); - if (i == 1) { - log.info("输送机{}下发切换导向{}成功", inSsjDevice.getDeviceCode(), agvQueues.get(0).getCtnrCode()); - } - } - if (!agvQueues.isEmpty() && inSsjDevice.getAllowPut() == 0 && "L1003".equals(inSsjDevice.getDeviceCode())) { - //下发输送线切换导向 DB未知 - int i = writeToSsjQH("DB802.118", Integer.parseInt(agvQueues.get(0).getCtnrCode())); - if (i == 1) { - log.info("输送机{}下发切换导向{}成功", inSsjDevice.getDeviceCode(), agvQueues.get(0).getCtnrCode()); - } - } - - //允许放货 - if (!agvQueues.isEmpty() && inSsjDevice.getAllowPut() == 2) { - log.info("设备:{} 位置:{} 任务号:{} 请求放货成功", inSsjDevice.getDeviceCode(), "输送线", agvQueues.get(0).getWmsTaskNo()); - AjaxResult ajaxResult = apiService.continueTask(agvQueues.get(0)); - if (ajaxResult.isSuccess()) { - log.info("下发agv允许放货成功" + agvQueues.get(0).getWmsTaskNo()); - agvQueues.get(0).setStatus("6"); - agvQueueService.updateAgvQueue(agvQueues.get(0)); - } - } - } - //入库下发输送线 - if (inSsjDevice.getKx() == 0 && inSsjDevice.getTaskNo2() == 0) { - AgvQueue agvQueue = new AgvQueue(); - agvQueue.setStatus("7"); //end - //todo 与agv对点 - agvQueue.setPositionCode2(inSsjDevice.getDeviceCode()); - List agvQueues = agvQueueService.selectAgvQueueList1(agvQueue); - if (!agvQueues.isEmpty()) { - //解绑AGV容器 - AjaxResult ajaxResult = apiService.deleteAgvTray(agvQueues.get(0)); - if(ajaxResult.isSuccess()) { - AgvQueue agvQueue1 = agvQueues.get(0); - agvQueue1.setStatus("8"); - agvQueueService.updateAgvQueue(agvQueue1); - } - - if("L1001".equals(inSsjDevice.getDeviceCode())) { - int i = writeToSsj("DB802.100", agvQueues.get(0).getWmsTaskNo(), 2,Integer.parseInt(agvQueues.get(0).getCtnrCode())); - if (i == 1) { - log.info("输送机{}AGV放货完成下发任务号{}成功", inSsjDevice.getDeviceCode(), agvQueues.get(0).getWmsTaskNo()); - - } - } - if("L1003".equals(inSsjDevice.getDeviceCode())) { - int i = writeToSsj("DB802.112", agvQueues.get(0).getWmsTaskNo(), 2,Integer.parseInt(agvQueues.get(0).getCtnrCode())); - if (i == 1) { - log.info("输送机{}AGV放货完成下发任务号{}成功", inSsjDevice.getDeviceCode(), agvQueues.get(0).getWmsTaskNo()); - - } - } - }else{ - AgvQueue agvQueue2 = new AgvQueue(); - agvQueue2.setStatus("8"); //end - //todo 与agv对点 - agvQueue2.setPositionCode2(inSsjDevice.getDeviceCode()); - List queueList = agvQueueService.selectAgvQueueList1(agvQueue2); - if (!queueList.isEmpty()) { - if("L1001".equals(inSsjDevice.getDeviceCode())) { - int i = writeToSsj("DB802.100", queueList.get(0).getWmsTaskNo(), 2,Integer.parseInt(queueList.get(0).getCtnrCode())); - if (i == 1) { - log.info("输送机{}AGV放货完成下发任务号{}成功", inSsjDevice.getDeviceCode(), queueList.get(0).getWmsTaskNo()); - - } - } - if("L1003".equals(inSsjDevice.getDeviceCode())) { - int i = writeToSsj("DB802.112", queueList.get(0).getWmsTaskNo(), 2,Integer.parseInt(queueList.get(0).getCtnrCode())); - if (i == 1) { - log.info("输送机{}AGV放货完成下发任务号{}成功", inSsjDevice.getDeviceCode(), queueList.get(0).getWmsTaskNo()); - - } - } - } - } - } - - if(inSsjDevice.getKx() == 0 && inSsjDevice.getTaskNo2() > 0){ - AgvQueue agvQueue = new AgvQueue(); - agvQueue.setStatus("8"); //end - //todo 与agv对点 - agvQueue.setPositionCode2(inSsjDevice.getDeviceCode()); - List agvQueues = agvQueueService.selectAgvQueueList1(agvQueue); - if(agvQueues.size() > 0){ - MydoJob mydoJob = mydoJobService.selectMydoJobByJobId(agvQueues.get(0).getTaskCode()); - mydoJob.setExecutionPhase(TASK_EP_SSJ); - mydoJobService.updateMydoJob(mydoJob); - agvQueueService.insertHistory(agvQueues.get(0).getReqCode()); - agvQueueService.deleteAgvQueueByReqCode(agvQueues.get(0).getReqCode()); - } - } - //出库到位 - if (inSsjDevice.getDw() == 1 && inSsjDevice.getTaskNo() > 0) { - - MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(Convert.toLong(inSsjDevice.getTaskNo())); - if (mydoJob != null && Integer.parseInt(mydoJob.getInOrOut()) > 20) { - log.info("设备:{} 位置:{} 任务号:{} 出库到位", "输送线", inSsjDevice.getDeviceCode(), mydoJob.getTaskNo()); - mydoJobService.insertHistory(mydoJob.getJobId()); - mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId()); - JobCallBack jobCallBack = new JobCallBack(); - jobCallBack.setType("2"); - jobCallBack.setMydojobId(mydoJob.getJobId()); - jobCallBack.setStatus("0"); - jobCallBack.setTaskNo(Convert.toLong(mydoJob.getTaskNo())); - jobCallBack.setCreateTime(new Date()); - jobCallBack.setSpare1("0"); - jobCallBackService.insertJobCallBack(jobCallBack); - } - } - } - - public void inDispatch1(DeviceSsj ssjDevice) { - //有入库请求就肯定是电气的任务号的作业 - if(StrUtil.isNotBlank(ssjDevice.getTrayCode()) && ssjDevice.getRkqq()==1 && ssjDevice.getTaskNo()<1000){ - //,如果有正执行的出库作业退回 - MydoJob mydoJobParam = new MydoJob(); - mydoJobParam.setInOut("2"); - mydoJobParam.setStatus("3"); - mydoJobParam.setExitId(ssjDevice.getDeviceCode()); - List outMydoJobList = mydoJobService.selectInOrOutMydoJobList(mydoJobParam); - if(!outMydoJobList.isEmpty()){ - //todo 去向不明朗 - int i = writeToSsj(ssjDevice.getPlcDbWriteAddress(),"99",2,2); - if (i == 1) { - log.info(ssjDevice.getDeviceCode()+"有正执行的出库作业退回" ); - } - return; - } - - MydoJob mydoJob = new MydoJob(); - mydoJob.setInOrOut("1"); -// mydoJob.setStatus("1"); - String trayCode = ssjDevice.getTrayCode(); - //String[] split = trayCode.split("\\s+"); - String serial = findFirst(PATTERNS.get("SERIAL"), trayCode); - mydoJob.setTrayCode(serial); - mydoJob.setEntranceId(ssjDevice.getDeviceCode()); - List mydoJobs = mydoJobService.selectMydoJobList(mydoJob); - if(!mydoJobs.isEmpty()){ - MydoJob mydoJob1 = mydoJobs.get(0); - int i = writeToSsj(ssjDevice.getPlcDbWriteAddress(),mydoJob1.getTaskNo(),1,1); - if (i == 1) { - mydoJob1.setExecutionPhase(TASK_EP_SSJ); - mydoJob1.setStatus("3"); - mydoJobService.updateMydoJob(mydoJob1); - log.info(ssjDevice.getDeviceCode()+"输送机下发任务号成功:{}" , mydoJob1.getTaskNo()); - } - }else{ - HashMap map = new HashMap<>(); - map.put("trayCode",ssjDevice.getTrayCode()); - map.put("entranceId",ssjDevice.getDeviceCode()); - map.put("floor", "2"); - AjaxResult ajaxResult = apiService.selectMydoJobByTrayCodeAndEntranceId(map); - if(ajaxResult.isSuccess()){ - MydoJob mydoJob2 = BeanUtil.toBean(ajaxResult.get("data"), MydoJob.class); - mydoJob2.setStatus("1"); - mydoJob2.setExecutionPhase(TASK_EP_CREATE); - mydoJob2.setCreateTime(new Date()); - mydoJob2.setFaultFlag("0"); - mydoJob2.setPriority(Long.valueOf(10)); - mydoJobService.insertMydoJob(mydoJob2); - int i = writeToSsj(ssjDevice.getPlcDbWriteAddress(),mydoJob2.getTaskNo(),1,1); - if (i == 1) { - mydoJob2.setExecutionPhase(TASK_EP_SSJ); - mydoJob2.setStatus("3"); - mydoJobService.updateMydoJob(mydoJob2); - log.info(ssjDevice.getDeviceCode()+"输送机下发任务号成功:{}" , mydoJob2.getTaskNo()); - } - }else{ - //todo 去向不明朗 - int i = writeToSsj(ssjDevice.getPlcDbWriteAddress(),"99",2,2); - if (i == 1) { - log.info(ssjDevice.getDeviceCode()+"输送机没取到作业下发输送线" ); - } - } - } - } - -// if(StrUtil.isBlank(ssjDevice.getTrayCode()) && ssjDevice.getRkqq()==1 && ssjDevice.getTaskNo()<1000){ -// -// MydoJob mydoJob1 = new MydoJob(); -// mydoJob1.setInOrOut("1"); -// mydoJob1.setEntranceId(ssjDevice.getDeviceCode()); -//// mydoJob1.setStatus("1"); -// List mydoJobs = mydoJobService.selectInOrOutMydoJobList(mydoJob1); -// if(!mydoJobs.isEmpty()){ -// MydoJob mydoJob2 = mydoJobs.get(0); -// int i = writeToSsj(ssjDevice.getPlcDbWriteAddress(),mydoJob2.getTaskNo(),1,1); -// if (i == 1) { -// mydoJob2.setExecutionPhase(TASK_EP_SSJ); -// mydoJob2.setStatus("3"); -// mydoJobService.updateMydoJob(mydoJob2); -// log.info(ssjDevice.getDeviceCode()+"输送机下发任务号成功:" + mydoJob2.getTaskNo()); -// } -// -// }else{ -// HashMap paramMap = new HashMap<>(); -// paramMap.put("size", ssjDevice.getTraySize()); -// paramMap.put("entranceId", ssjDevice.getDeviceCode()); -// AjaxResult ajaxResult = apiService.selectMydoJobByNoTrayCode(paramMap); -// if(ajaxResult.isSuccess()){ -// MydoJob mydoJob2 = BeanUtil.toBean(ajaxResult.get("data"), MydoJob.class) ; -// mydoJob2.setStatus("1"); -// mydoJob2.setExecutionPhase(TASK_EP_CREATE); -// mydoJob2.setCreateTime(new Date()); -// mydoJob2.setFaultFlag("0"); -// mydoJobService.insertMydoJob(mydoJob2); -// int i = writeToSsj(ssjDevice.getPlcDbWriteAddress(),mydoJob2.getTaskNo(),1,1); -// if (i == 1) { -// mydoJob2.setExecutionPhase(TASK_EP_SSJ); -// mydoJob2.setStatus("3"); -// mydoJobService.updateMydoJob(mydoJob2); -// log.info(ssjDevice.getDeviceCode()+"输送机下发任务号成功:" + mydoJob2.getTaskNo()); -// } -// }else{ -// int i = writeToSsj(ssjDevice.getPlcDbWriteAddress(), "99", Integer.parseInt(ajaxResult.get("code").toString()), 2); -// if (i == 1) { -// log.info(ssjDevice.getDeviceCode()+"输送机下发错误信息成功"); -// } -// } -// } -// } - } - - private static final Map PATTERNS = createPatterns(); - private static Map createPatterns() { - Map map = new LinkedHashMap<>(); - map.put("MODEL", Pattern.compile("MODEL:([^\\s]+)", Pattern.CASE_INSENSITIVE)); - map.put("COLOR", Pattern.compile("COLOR:([^\\s]+)", Pattern.CASE_INSENSITIVE)); - map.put("SERIAL", Pattern.compile("SERIAL:([^\\s]+)", Pattern.CASE_INSENSITIVE)); - map.put("V", Pattern.compile("V:([^\\s]+)", Pattern.CASE_INSENSITIVE)); - map.put("Hz", Pattern.compile("Hz:([^\\s]+)", Pattern.CASE_INSENSITIVE)); - map.put("PH", Pattern.compile("PH:([^\\s]+)", Pattern.CASE_INSENSITIVE)); - map.put("NW", Pattern.compile("N\\.W\\.:([^\\s]+)", Pattern.CASE_INSENSITIVE)); - map.put("GW", Pattern.compile("G\\.W\\.:([^\\s]+)", Pattern.CASE_INSENSITIVE)); - map.put("ITEM_CODE", Pattern.compile("ITEM_CODE:([^\\s]+)", Pattern.CASE_INSENSITIVE)); - map.put("@", Pattern.compile("@:([^\\s]+)", Pattern.CASE_INSENSITIVE)); - return map; - } - private static String findFirst(Pattern pattern, String input) { - if (pattern == null || input == null) return null; - Matcher m = pattern.matcher(input); - return m.find() ? m.group(1) : null; - } -} diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml index 8151140..7c7f995 100644 --- a/ruoyi-admin/src/main/resources/application-druid.yml +++ b/ruoyi-admin/src/main/resources/application-druid.yml @@ -6,12 +6,20 @@ spring: druid: #主数据信息 master: -# url: jdbc:sqlserver://172.16.2.170:1433;databaseName=FT517-WCS; +# 本地工控机 +# url: jdbc:sqlserver://172.16.4.12:1433;databaseName=FT517-WCS;encrypt=true;trustServerCertificate=true; # username: sa # password: Flrd0914. - url: jdbc:sqlserver://192.168.58.10:1433;databaseName=FT517-wcs;;encrypt=true;trustServerCertificate=true; + +# 本机 + url: jdbc:sqlserver://localhost:1433;databaseName=FT568-wcs;encrypt=true;trustServerCertificate=true; username: sa - password: www.123.com + password: 123456 + +# 生产 +# url: jdbc:sqlserver://192.168.58.10:1433;databaseName=FT568-wcs;encrypt=true;trustServerCertificate=true; +# username: sa +# password: www.123.com # 从库数据源 slave: diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 6aa9fb0..8449bb9 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -68,7 +68,8 @@ spring: # redis 配置 redis: # 地址 - host: 192.168.58.10 +# host: 192.168.58.10 + host: 172.16.4.12 # 端口,默认为6379 port: 6379 # 数据库索引