diff --git a/nladmin-system/src/main/java/org/nl/agv/enu/TaskTypeEnum.java b/nladmin-system/src/main/java/org/nl/agv/enu/TaskTypeEnum.java new file mode 100644 index 0000000..f5b1a36 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/agv/enu/TaskTypeEnum.java @@ -0,0 +1,41 @@ +package org.nl.agv.enu; + +import java.util.Arrays; +import java.util.Optional; + +/** + * 任务类型 + * + * @author gbx + * @since 2023-11-24 + */ +public enum TaskTypeEnum { + + // + COMMON("普通", "1"), + REST("返回休息点任务", "2"), + TAKE("取货", "3"), + PUT("放货", "4"), + RETURN("返程", "5"), + MULTIPLE("多机", "6"); + private final String name; + private final String code; + + TaskTypeEnum(String name, String code) { + this.name = name; + this.code = code; + } + + public String getName() { + return name; + } + + public String getCode() { + return code; + } + + public static TaskStatusEnum getType(String type) { + Optional first = Arrays.stream(TaskStatusEnum.values()).filter(a -> a.getCode().equals(type)).findFirst(); + return first.orElse(TaskStatusEnum.OTHER); + } +} diff --git a/nladmin-system/src/main/java/org/nl/agv/service/HomeService.java b/nladmin-system/src/main/java/org/nl/agv/service/HomeService.java index bc96065..adf1dff 100644 --- a/nladmin-system/src/main/java/org/nl/agv/service/HomeService.java +++ b/nladmin-system/src/main/java/org/nl/agv/service/HomeService.java @@ -25,6 +25,10 @@ public interface HomeService { * @return Map */ Map queryHomePage(Map jsonObject); + + + + /** * 首页确定按钮 * diff --git a/nladmin-system/src/main/java/org/nl/agv/service/TaskService.java b/nladmin-system/src/main/java/org/nl/agv/service/TaskService.java index a6ba087..9fa1b7e 100644 --- a/nladmin-system/src/main/java/org/nl/agv/service/TaskService.java +++ b/nladmin-system/src/main/java/org/nl/agv/service/TaskService.java @@ -24,6 +24,9 @@ public interface TaskService { * @return Map */ Map confirmPoint(Map jsonObject); + + Map confirmPoint1(Map jsonObject); + /** * 查询任务列表 * diff --git a/nladmin-system/src/main/java/org/nl/agv/service/impl/HomeServiceImpl.java b/nladmin-system/src/main/java/org/nl/agv/service/impl/HomeServiceImpl.java index 68934ac..478939f 100644 --- a/nladmin-system/src/main/java/org/nl/agv/service/impl/HomeServiceImpl.java +++ b/nladmin-system/src/main/java/org/nl/agv/service/impl/HomeServiceImpl.java @@ -31,8 +31,11 @@ import edu.wpi.rail.jrosbridge.messages.Message; import edu.wpi.rail.jrosbridge.services.ServiceResponse; import lombok.RequiredArgsConstructor; import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.annotations.Case; import org.nl.agv.enu.TaskSendBackStatusEnum; import org.nl.agv.enu.TaskStatusEnum; +import org.nl.agv.enu.TaskTypeEnum; import org.nl.agv.service.HomeService; import org.nl.agv.unit.RosUtil; import org.nl.agv.unit.sendToAgvUtil; @@ -40,8 +43,14 @@ import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.core.bean.WQLObject; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; @@ -57,641 +66,699 @@ import java.util.stream.Collectors; */ @Service @RequiredArgsConstructor -public class HomeServiceImpl implements HomeService{ - @Resource - @Qualifier("threadPool") - private ThreadPoolExecutor pool; - //定时器查询调试信息,放入json其他地方直接调用; - public static JSONObject debugInfoJson = new JSONObject(); +public class HomeServiceImpl implements HomeService { + @Resource + @Qualifier("threadPool") + private ThreadPoolExecutor pool; + //定时器查询调试信息,放入json其他地方直接调用; + public static JSONObject debugInfoJson = new JSONObject(); - public HomeServiceImpl(ThreadPoolExecutor pool) { - this.pool = pool; - } + public HomeServiceImpl(ThreadPoolExecutor pool) { + this.pool = pool; + } - /** - * 优化获取主页及状态栏信息 - */ - @Override - public Map queryHomePage(Map jsonObject) { - String button_code = ""; - String button_name = ""; - String agvrun_status_name = ""; - String automatic_status_name = ""; - String device_info = ""; - String task_name = ""; - String task_info = ""; - Integer electric = 0; - String speed = ""; - String task_status = "无任务"; - String error_name = ""; - JSONObject returnjo = new JSONObject(); - JSONObject row = new JSONObject(); - try { - CompletableFuture.runAsync(this::qeryDebuggerInfo, pool); - List allTasks = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0").getResultJSONArray(0).toJavaList(JSONObject.class); - // 执行中任务 - Optional taskingOptional = allTasks.stream().filter(task -> TaskStatusEnum.RUNNING.getCode().equals(task.getString("task_status")) && "1".equals(task.getString("task_type"))).findFirst(); - //所有未执行任务的第一个任务 - Optional taskedOptional = allTasks.stream().filter(task -> TaskStatusEnum.CREATE.getCode().equals(task.getString("task_status")) && "1".equals(task.getString("task_type"))).min(Comparator.comparingInt(task -> task.getIntValue("seq_num"))); - //需要人工介入的任务 - Optional unManFinishTaskOptional = allTasks.stream().filter(task -> TaskStatusEnum.END.getCode().equals(task.getString("task_status")) && "0".equals(task.getString("is_manualfinished")) && "1".equals(task.getString("task_type"))).findFirst(); - if(taskingOptional.isPresent()) { - task_name = "任务号:" + taskingOptional.get().getString("task_code"); - task_info = "目标点:" + taskingOptional.get().getString("next_point_code"); - task_status = "执行中"; - } - else if(taskedOptional.isPresent()) { - task_name = "任务号:" + taskedOptional.get().getString("task_code"); - task_info = "目标点:" + taskedOptional.get().getString("next_point_code"); - task_status = "有任务未执行"; - } - if(unManFinishTaskOptional.isPresent() && !taskedOptional.isPresent()) { - button_code = "1"; - button_name = "确认完成"; - } - if(unManFinishTaskOptional.isPresent() && taskedOptional.isPresent()) { - button_code = "2"; - button_name = "确认完成继续下个任务"; - } - if(!unManFinishTaskOptional.isPresent() && taskedOptional.isPresent()) { - button_code = "3"; - button_name = "继续搬运"; - } - if(!unManFinishTaskOptional.isPresent() && !taskedOptional.isPresent()) { - button_code = "4"; - button_name = "返回休息点"; - //按更新时间降序 - Optional doingtaskjo = allTasks.stream().sorted(Comparator.comparing(o -> o.getString("update_time"), Comparator.reverseOrder())).findFirst(); - if(doingtaskjo.isPresent() && "2".equals(doingtaskjo.get().getString("task_type"))) { - button_code = ""; - button_name = ""; - } - } - Optional tasking = allTasks.stream().filter(r -> TaskStatusEnum.RUNNING.getCode().equals(r.getString("task_status")) && "0".equals(r.getString("is_manualfinished"))).findFirst(); - if(tasking.isPresent()) { + @Resource + private TaskServiceServiceImpl taskServiceServiceImpl; + + + @Value("${spring.profiles.active}") + private String isProd; + + /** + * 优化获取主页及状态栏信息 + */ + @Override + public Map queryHomePage(Map jsonObject) { + String button_code = ""; + String button_name = ""; + String agvrun_status_name = ""; + String automatic_status_name = ""; + String device_info = ""; + String task_name = "无任务"; + String task_info = ""; + Integer electric = 0; + String speed = ""; + String task_status = "无任务"; + String error_name = ""; + JSONObject returnjo = new JSONObject(); + JSONObject row = new JSONObject(); + try { + CompletableFuture.runAsync(this::qeryDebuggerInfo, pool); + //CompletableFuture.runAsync(this::handleTaskStatus, pool); + List allTasks = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0").getResultJSONArray(0).toJavaList(JSONObject.class); + // 执行中任务 + Optional taskingOptional = allTasks.stream().filter(task -> TaskStatusEnum.RUNNING.getCode().equals(task.getString("task_status")) && !TaskTypeEnum.REST.getCode().equals(task.getString("task_type"))).findFirst(); + //所有未执行任务的第一个任务 + Optional taskedOptional = allTasks.stream().filter(task -> TaskStatusEnum.CREATE.getCode().equals(task.getString("task_status")) && !TaskTypeEnum.REST.getCode().equals(task.getString("task_type"))).min(Comparator.comparingInt(task -> task.getIntValue("seq_num"))); + //需要人工介入的任务 + Optional unManFinishTaskOptional = allTasks.stream().filter(task -> TaskStatusEnum.END.getCode().equals(task.getString("task_status")) && "0".equals(task.getString("is_manualfinished")) && !TaskTypeEnum.REST.getCode().equals(task.getString("task_type"))).findFirst(); + if (taskingOptional.isPresent()) { + task_name = "任务号:" + taskingOptional.get().getString("task_code"); + task_info = "目标点:" + taskingOptional.get().getString("next_point_code"); + task_status = "执行中"; + } else if (taskedOptional.isPresent()) { + task_name = "任务号:" + taskedOptional.get().getString("task_code"); + task_info = "目标点:" + taskedOptional.get().getString("next_point_code"); + task_status = "有任务未执行"; + } + if (unManFinishTaskOptional.isPresent() && !taskedOptional.isPresent()) { + button_code = "1"; + button_name = "确认完成"; + } + if (unManFinishTaskOptional.isPresent() && taskedOptional.isPresent()) { + button_code = "2"; + button_name = "确认完成继续下个任务"; + } + if (!unManFinishTaskOptional.isPresent() && taskedOptional.isPresent()) { + button_code = "3"; + button_name = "继续搬运"; + } + if (!unManFinishTaskOptional.isPresent() && !taskedOptional.isPresent()) { + button_code = "4"; + button_name = "返回休息点"; + //按更新时间降序 + Optional doingtaskjo = allTasks.stream().sorted(Comparator.comparing(o -> o.getString("update_time"), Comparator.reverseOrder())).findFirst(); + if (doingtaskjo.isPresent() && "2".equals(doingtaskjo.get().getString("task_type"))) { button_code = ""; button_name = ""; - } - //查询今天待执行/今天所有任务 - String task_num = determineTaskNum(allTasks); - if(debugInfoJson.size() > 0) { - //agv 运行状态获取名称 - agvrun_status_name = getAgvRunStatusName(debugInfoJson.getString("PathFollow_Enable")); - // 根据自动/手动状态获取名称 - automatic_status_name = getAutomaticStatusName(debugInfoJson.getString("Sys_Mode")); - speed = debugInfoJson.getString("Speedm_Tmp") == null ? "0" : debugInfoJson.getString("Speedm_Tmp"); - BigDecimal e = new BigDecimal(speed).setScale(3, RoundingMode.HALF_UP); - row.put("speed", e + "m/s"); - row.put("agvrun_status", debugInfoJson.getString("PathFollow_Enable")); - row.put("agvrun_status_name", agvrun_status_name); - row.put("automatic_status", debugInfoJson.getString("Sys_Mode")); - row.put("automatic_status_name", automatic_status_name); - electric = debugInfoJson.getInteger("PWR_Percent"); - row.put("electric", electric); - if(electric < 30) { - button_code = "4"; - button_name = "返回休息点"; - } - device_info = debugInfoJson.getString("Env_CustomName") + debugInfoJson.getString("Env_VehicleType"); - } - //获取错误代码 - error_name = setErrorInfo(); - row.put("error_name", error_name); - row.put("device_info", device_info); - row.put("task_status", task_status); - row.put("task_name", task_name); - row.put("task_info", task_info); - row.put("task_num", task_num); - row.put("button_code", button_code); - row.put("button_name", button_name); - returnjo.put("code", "1"); - returnjo.put("desc", "操作成功"); - returnjo.put("result", row); - return returnjo; - } - catch(Exception e) { - Log.error("通信失败:" + e.getMessage()); - throw new BadRequestException(e.getMessage() == null ? "通信失败,请检查系统参数中的Ros连接信息" : e.getMessage()); - } - } - - private String setErrorInfo() { - ErrorServiceImpl errorServiceImpl = new ErrorServiceImpl(); - Map error = errorServiceImpl.querryError(null); - JSONArray errorResult = JSONArray.parseArray(JSON.toJSONString(error.get("result"))); - if(errorResult.size() > 0) { - return errorResult.getJSONObject(0).getString("error_name"); - } - return "正常运行"; - } - - private String determineTaskNum(List allTasks) { - long allTasksCount = allTasks.stream().filter(task -> task.getString("date").equals(DateUtil.today())).count(); - long todayUnfinishedTasksCount = allTasks.stream().filter(task -> task.getString("date").equals(DateUtil.today()) && task.getString("task_status").equals("00")).count(); - return "待执行" + todayUnfinishedTasksCount + "/" + allTasksCount; - } - - //agv 运行状态获取名称 - private String getAgvRunStatusName(String agvRunStatus) { - if(StrUtil.equals(agvRunStatus, "1")) { - return "运行"; - } - else if(StrUtil.equals(agvRunStatus, "0")) { - return "待机"; - } - return ""; - } - - // 根据自动/手动状态获取名称 - private String getAutomaticStatusName(String automaticStatus) { - if(StrUtil.equals(automaticStatus, "3")) { - return "手动"; - } - else if(StrUtil.equals(automaticStatus, "4")) { - return "自动"; - } - else if(StrUtil.equals(automaticStatus, "5")) { - return "IO"; - } - return ""; - } - - public Map queryHomePage1(Map jsonObject) { - String button_code = ""; - String button_name = ""; - String agvrun_status_name = ""; - String automatic_status_name = ""; - String device_info = ""; - String task_name = ""; - String task_info = ""; - Integer electric = 0; - String speed = ""; - String error_name = "正常运行"; - JSONObject returnjo = new JSONObject(); - JSONObject row = new JSONObject(); - try { - //查询调试信息 - CompletableFuture.runAsync(this::qeryDebuggerInfo, pool); - JSONObject tasking = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 and task_status='01' and task_type='1'").uniqueResult(0); - // 1 无任务 2 有任务未执行 3 执行中 - String task_status = ""; - //1确认完成 2确认完成继续下个任务3继续搬运,4返回休息点 - String date = DateUtil.today(); - if(tasking == null) { - task_status = "无任务"; - } - //JSONObject tasked = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 and task_status='00'and task_type='1'").uniqueResult(0); - JSONObject tasked = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 and task_status='00'and task_type='1' order by seq_num ").uniqueResult(0); - if(tasked != null) { - task_status = "有任务未执行"; - } - if(tasking != null) { - task_status = "执行中"; - task_name = "任务号:" + tasking.getString("task_code"); - task_info = "目标点:" + tasking.getString("next_point_code"); - } - // else if(tasked!=null) - // { - // task_name = "任务号:" + tasked.getString("task_code"); - // task_info = "目标点:" + tasked.getString("next_point_code"); - // } - JSONObject unManFinishTask = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 and task_status='02' and is_manualfinished='0'and task_type='1'").uniqueResult(0); - //没有未执行任务,且需要人工完成 - if(unManFinishTask != null && tasked == null) { - button_code = "1"; - button_name = "确认完成"; - } - //存在未执行任务,且需要人工完成当前任务 - if(unManFinishTask != null && tasked != null) { - button_code = "2"; - button_name = "确认完成继续下个任务"; - } - //任务都完成了,但是还有未完成的任务 - if(unManFinishTask == null && tasked != null) { - button_code = "3"; - button_name = "继续搬运"; - } - //不存在需要人工完成的任务,且不存在未完成的任务 - if(unManFinishTask == null && tasked == null) { + } + } + Optional tasking = allTasks.stream().filter(r -> TaskStatusEnum.RUNNING.getCode().equals(r.getString("task_status")) && "0".equals(r.getString("is_manualfinished"))).findFirst(); + if (tasking.isPresent()) { + button_code = ""; + button_name = ""; + } + //查询今天待执行/今天所有任务,改为不限今天,所有待执行/所有任务 + String task_num = determineTaskNum(allTasks); + if (debugInfoJson.size() > 0) { + //agv 运行状态获取名称 + agvrun_status_name = getAgvRunStatusName(debugInfoJson.getString("PathFollow_Enable")); + // 根据自动/手动状态获取名称 + automatic_status_name = getAutomaticStatusName(debugInfoJson.getString("Sys_Mode")); + speed = debugInfoJson.getString("Speedm_Tmp") == null ? "0" : debugInfoJson.getString("Speedm_Tmp"); + BigDecimal e = new BigDecimal(speed).setScale(3, RoundingMode.HALF_UP); + row.put("speed", e + "m/s"); + row.put("agvrun_status", debugInfoJson.getString("PathFollow_Enable")); + row.put("agvrun_status_name", agvrun_status_name); + row.put("automatic_status", debugInfoJson.getString("Sys_Mode")); + row.put("automatic_status_name", automatic_status_name); + electric = debugInfoJson.getInteger("PWR_Percent"); + row.put("electric", electric); + if (electric < 30) { button_code = "4"; button_name = "返回休息点"; - //假如所有的任务都完成,包括返回休息点的任务,且最后一个完成任务的时间是返回休息电的任务也不显示 - JSONObject doingtaskjo = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 ", "update_time desc").uniqueResult(0); - if(doingtaskjo != null && doingtaskjo.getString("task_type").equals("2")) { - button_code = ""; - button_name = ""; - } - } - //假如有执行中的任务,则不显示 - JSONObject doingtaskjo = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 and task_status='01' and is_manualfinished='0'").uniqueResult(0); - if(doingtaskjo != null) { + } + device_info = debugInfoJson.getString("Env_CustomName") + debugInfoJson.getString("Env_VehicleType"); + } + //获取错误代码 + error_name = setErrorInfo(); + row.put("error_name", error_name); + row.put("device_info", device_info); + row.put("task_status", task_status); + row.put("task_name", task_name); + row.put("task_info", task_info); + row.put("task_num", task_num); + row.put("button_code", button_code); + row.put("button_name", button_name); + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功"); + returnjo.put("result", row); + return returnjo; + } catch (Exception e) { + Log.error("通信失败:" + e.getMessage()); + throw new BadRequestException(e.getMessage() == null ? "通信失败,请检查系统参数中的Ros连接信息" : e.getMessage()); + } + } + + private String setErrorInfo() { + ErrorServiceImpl errorServiceImpl = new ErrorServiceImpl(); + Map error = errorServiceImpl.querryError(null); + JSONArray errorResult = JSONArray.parseArray(JSON.toJSONString(error.get("result"))); + if (errorResult.size() > 0) { + return errorResult.getJSONObject(0).getString("error_name"); + } + return "正常运行"; + } + + private String determineTaskNum(List allTasks) { + long allTasksCount = allTasks.size(); + long todayUnfinishedTasksCount = allTasks.stream().filter(task -> task.getString("task_status").equals(TaskStatusEnum.CREATE.getCode())).count(); + return "待执行" + todayUnfinishedTasksCount + "/" + allTasksCount; + } + + //agv 运行状态获取名称 + private String getAgvRunStatusName(String agvRunStatus) { + if (StrUtil.equals(agvRunStatus, "1")) { + return "运行"; + } else if (StrUtil.equals(agvRunStatus, "0")) { + return "待机"; + } + return ""; + } + + // 根据自动/手动状态获取名称 + private String getAutomaticStatusName(String automaticStatus) { + if (StrUtil.equals(automaticStatus, "3")) { + return "手动"; + } else if (StrUtil.equals(automaticStatus, "4")) { + return "自动"; + } else if (StrUtil.equals(automaticStatus, "5")) { + return "IO"; + } + return ""; + } + + public Map queryHomePage1(Map jsonObject) { + String button_code = ""; + String button_name = ""; + String agvrun_status_name = ""; + String automatic_status_name = ""; + String device_info = ""; + String task_name = ""; + String task_info = ""; + Integer electric = 0; + String speed = ""; + String error_name = "正常运行"; + JSONObject returnjo = new JSONObject(); + JSONObject row = new JSONObject(); + try { + //查询调试信息 + CompletableFuture.runAsync(this::qeryDebuggerInfo, pool); + JSONObject tasking = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 and task_status='01' and task_type!='2'").uniqueResult(0); + // 1 无任务 2 有任务未执行 3 执行中 + String task_status = ""; + //1确认完成 2确认完成继续下个任务3继续搬运,4返回休息点 + String date = DateUtil.today(); + if (tasking == null) { + task_status = "无任务"; + } + //JSONObject tasked = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 and task_status='00'and task_type!='2'").uniqueResult(0); + JSONObject tasked = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 and task_status='00'and task_type!='2' order by seq_num ").uniqueResult(0); + if (tasked != null) { + task_status = "有任务未执行"; + } + if (tasking != null) { + task_status = "执行中"; + task_name = "任务号:" + tasking.getString("task_code"); + task_info = "目标点:" + tasking.getString("next_point_code"); + } + // else if(tasked!=null) + // { + // task_name = "任务号:" + tasked.getString("task_code"); + // task_info = "目标点:" + tasked.getString("next_point_code"); + // } + JSONObject unManFinishTask = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 and task_status='02' and is_manualfinished='0'and task_type!='2'").uniqueResult(0); + //没有未执行任务,且需要人工完成 + if (unManFinishTask != null && tasked == null) { + button_code = "1"; + button_name = "确认完成"; + } + //存在未执行任务,且需要人工完成当前任务 + if (unManFinishTask != null && tasked != null) { + button_code = "2"; + button_name = "确认完成继续下个任务"; + } + //任务都完成了,但是还有未完成的任务 + if (unManFinishTask == null && tasked != null) { + button_code = "3"; + button_name = "继续搬运"; + } + //不存在需要人工完成的任务,且不存在未完成的任务 + if (unManFinishTask == null && tasked == null) { + button_code = "4"; + button_name = "返回休息点"; + //假如所有的任务都完成,包括返回休息点的任务,且最后一个完成任务的时间是返回休息电的任务也不显示 + JSONObject doingtaskjo = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 ", "update_time desc").uniqueResult(0); + if (doingtaskjo != null && doingtaskjo.getString("task_type").equals("2")) { button_code = ""; button_name = ""; - } - String task_num = "待执行0"; - //分母 今天所有的任务,分子今天未完成的任务 - JSONArray alltaskja = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 and task_type='1' and date ='" + date + "'").getResultJSONArray(0); - if(alltaskja.size() > 0) { - JSONArray todaytaskja = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 and task_type='1' and date ='" + date + "' and task_status='00'").getResultJSONArray(0); - String alltask_num = String.valueOf(alltaskja.size()); - String todaytask_num = String.valueOf(todaytaskja.size()); - task_num = "待执行" + todaytask_num + "/" + alltask_num; - } - if(debugInfoJson.size() > 0) { - //车辆运行还是待机是PathFollow_Enable 1为运行 0为待机 - String agvrun_status = debugInfoJson.getString("PathFollow_Enable"); - if(StrUtil.equals(agvrun_status, "1")) { - automatic_status_name = "运行"; - } - if(StrUtil.equals(agvrun_status, "0")) { - automatic_status_name = "待机"; - } - //手自动是Sys_Mode 3 REMA手动 4自动 5 IO手持方式的手动,这个车不装 - String automatic_status = debugInfoJson.getString("Sys_Mode"); - if(StrUtil.equals(automatic_status, "3")) { - agvrun_status_name = "手动"; - } - if(StrUtil.equals(automatic_status, "4")) { - agvrun_status_name = "自动"; - } - if(StrUtil.equals(automatic_status, "5")) { - agvrun_status_name = "IO"; - } - //速度 - speed = debugInfoJson.getString("Speedm_Tmp") == null ? "0" : debugInfoJson.getString("Speedm_Tmp"); - BigDecimal e = new BigDecimal(speed).setScale(3, RoundingMode.HALF_UP); - row.put("speed", e + "m/s"); - //agv状态枚举 - row.put("agvrun_status", agvrun_status); - //agv状态名称,1为运行 0为待机 - row.put("agvrun_status_name", agvrun_status_name); - //agv操纵枚举 - row.put("automatic_status", automatic_status); - //agv操纵名称,3 REMA手动 4自动 - row.put("automatic_status_name", automatic_status_name); - //假如电量低于30 ,则返回休息电 - electric = debugInfoJson.getInteger("PWR_Percent"); - //电量 - row.put("electric", electric); - if(electric < 30) { - button_code = "4"; - button_name = "返回休息点"; - } - String Env_CustomName = debugInfoJson.getString("Env_CustomName"); - String Env_VehicleType = debugInfoJson.getString("Env_VehicleType"); - //设备名称 - device_info = Env_CustomName + Env_VehicleType; - } - ErrorServiceImpl errorServiceImpl = new ErrorServiceImpl(); - Map error = errorServiceImpl.querryError(null); - JSONArray errorResult = JSONArray.parseArray(JSON.toJSONString(error.get("result"))); - if(errorResult.size() > 0) { - error_name = errorResult.getJSONObject(0).getString("error_name"); - } - //row.put("agv_error", (String) error.get("error_status")); - //故障信息 - row.put("error_name", error_name); - //设备信息 - row.put("device_info", device_info); - //任务状态 - row.put("task_status", task_status); - //当前任务 - row.put("task_name", task_name); - row.put("task_info", task_info); - row.put("task_num", task_num); - row.put("button_code", button_code); - row.put("button_name", button_name); - returnjo.put("code", "1"); - returnjo.put("desc", "操作成功"); - returnjo.put("result", row); - return returnjo; - } - catch(Exception e) { - Log.error("通信失败:" + e.getMessage()); - throw new BadRequestException(e.getMessage() == null ? "通信失败,请检查系统参数中的Ros连接信息" : e.getMessage()); - } - } + } + } + //假如有执行中的任务,则不显示 + JSONObject doingtaskjo = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 and task_status='01' and is_manualfinished='0'").uniqueResult(0); + if (doingtaskjo != null) { + button_code = ""; + button_name = ""; + } + String task_num = "待执行0"; + //分母 今天所有的任务,分子今天未完成的任务 + JSONArray alltaskja = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 and task_type!='2' and date ='" + date + "'").getResultJSONArray(0); + if (alltaskja.size() > 0) { + JSONArray todaytaskja = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 and task_type!='2' and date ='" + date + "' and task_status='00'").getResultJSONArray(0); + String alltask_num = String.valueOf(alltaskja.size()); + String todaytask_num = String.valueOf(todaytaskja.size()); + task_num = "待执行" + todaytask_num + "/" + alltask_num; + } + if (debugInfoJson.size() > 0) { + //车辆运行还是待机是PathFollow_Enable 1为运行 0为待机 + String agvrun_status = debugInfoJson.getString("PathFollow_Enable"); + if (StrUtil.equals(agvrun_status, "1")) { + automatic_status_name = "运行"; + } + if (StrUtil.equals(agvrun_status, "0")) { + automatic_status_name = "待机"; + } + //手自动是Sys_Mode 3 REMA手动 4自动 5 IO手持方式的手动,这个车不装 + String automatic_status = debugInfoJson.getString("Sys_Mode"); + if (StrUtil.equals(automatic_status, "3")) { + agvrun_status_name = "手动"; + } + if (StrUtil.equals(automatic_status, "4")) { + agvrun_status_name = "自动"; + } + if (StrUtil.equals(automatic_status, "5")) { + agvrun_status_name = "IO"; + } + //速度 + speed = debugInfoJson.getString("Speedm_Tmp") == null ? "0" : debugInfoJson.getString("Speedm_Tmp"); + BigDecimal e = new BigDecimal(speed).setScale(3, RoundingMode.HALF_UP); + row.put("speed", e + "m/s"); + //agv状态枚举 + row.put("agvrun_status", agvrun_status); + //agv状态名称,1为运行 0为待机 + row.put("agvrun_status_name", agvrun_status_name); + //agv操纵枚举 + row.put("automatic_status", automatic_status); + //agv操纵名称,3 REMA手动 4自动 + row.put("automatic_status_name", automatic_status_name); + //假如电量低于30 ,则返回休息电 + electric = debugInfoJson.getInteger("PWR_Percent"); + //电量 + row.put("electric", electric); + if (electric < 30) { + button_code = "4"; + button_name = "返回休息点"; + } + String Env_CustomName = debugInfoJson.getString("Env_CustomName"); + String Env_VehicleType = debugInfoJson.getString("Env_VehicleType"); + //设备名称 + device_info = Env_CustomName + Env_VehicleType; + } + ErrorServiceImpl errorServiceImpl = new ErrorServiceImpl(); + Map error = errorServiceImpl.querryError(null); + JSONArray errorResult = JSONArray.parseArray(JSON.toJSONString(error.get("result"))); + if (errorResult.size() > 0) { + error_name = errorResult.getJSONObject(0).getString("error_name"); + } + //row.put("agv_error", (String) error.get("error_status")); + //故障信息 + row.put("error_name", error_name); + //设备信息 + row.put("device_info", device_info); + //任务状态 + row.put("task_status", task_status); + //当前任务 + row.put("task_name", task_name); + row.put("task_info", task_info); + row.put("task_num", task_num); + row.put("button_code", button_code); + row.put("button_name", button_name); + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功"); + returnjo.put("result", row); + return returnjo; + } catch (Exception e) { + Log.error("通信失败:" + e.getMessage()); + throw new BadRequestException(e.getMessage() == null ? "通信失败,请检查系统参数中的Ros连接信息" : e.getMessage()); + } + } - @Override - public Map clickSave(Map jsonObject) { - WQLObject taskTable = WQLObject.getWQLObject("ST_TASK_INFO"); - String button_code = (String) jsonObject.get("button_code"); - JSONObject returnjo = new JSONObject(); - //1确认完成 - if(StrUtil.equals(button_code, "1")) { - JSONObject taskjo = taskTable.query("is_delete='0' and task_status='02' and task_type ='1' and is_manualfinished='0'").uniqueResult(0); - if(ObjectUtil.isEmpty(taskjo)) { - throw new BadRequestException("未找到任务"); - } - taskjo.put("is_manualfinished", "1"); - taskjo.put("update_by", SecurityUtils.getCurrentNickName()); - taskTable.update(taskjo); - } - // 2确认完成继续下个任务 - if(StrUtil.equals(button_code, "2")) { - JSONObject taskjo = taskTable.query("is_delete='0' and task_status='02' and task_type ='1' and is_manualfinished='0'").uniqueResult(0); - if(ObjectUtil.isEmpty(taskjo)) { - returnjo.put("code", "1"); - returnjo.put("desc", "未找到任务"); - return returnjo; - } - taskjo.put("is_manualfinished", "1"); - taskjo.put("update_by", SecurityUtils.getCurrentNickName()); - taskTable.update(taskjo); - //下发下一个任务 - JSONObject nexttaskjo = taskTable.query("is_delete='0' and task_status='00' and task_type ='1' ", "seq_num").uniqueResult(0); - if(ObjectUtil.isEmpty(nexttaskjo)) { - returnjo.put("code", "1"); - returnjo.put("desc", "未找到任务"); - return returnjo; - } - String a = "HMIStepOrRTPathFollow:0;" + nexttaskjo.getString("next_point_code") + ";1#"; - ServiceResponse send = sendToAgvUtil.send(a); - JSONObject resjo = JSONObject.parseObject(send.toString()); - String resultflag = resjo.getString("result"); - if(StrUtil.equals("0", resultflag)) { - //改变任务的状态 - nexttaskjo.put("task_status", "01"); - nexttaskjo.put("task_status_name", "执行中"); - nexttaskjo.put("update_by", SecurityUtils.getCurrentNickName()); - WQLObject.getWQLObject("ST_TASK_INFO").update(nexttaskjo); - } - else{ - returnjo.put("code", "1"); - returnjo.put("desc", TaskSendBackStatusEnum.getName(resultflag)); - return returnjo; - } - } - //3继续搬运 - if(StrUtil.equals(button_code, "3")) { - JSONObject nexttaskjo = taskTable.query("is_delete='0' and task_status='00' and task_type ='1' ", "seq_num").uniqueResult(0); - if(ObjectUtil.isEmpty(nexttaskjo)) { - throw new BadRequestException("未找到任务"); - } - //下发这个任务 - String a = "HMIStepOrRTPathFollow:0;" + nexttaskjo.getString("next_point_code") + ";1#"; - ServiceResponse send = sendToAgvUtil.send(a); - JSONObject resjo = JSONObject.parseObject(send.toString()); - String resultflag = resjo.getString("result"); - if(StrUtil.equals("0", resultflag)) { - //改变任务的状态 - nexttaskjo.put("task_status", "01"); - nexttaskjo.put("task_status_name", "执行中"); - nexttaskjo.put("update_by", SecurityUtils.getCurrentNickName()); - WQLObject.getWQLObject("ST_TASK_INFO").update(nexttaskjo); - } - else{ - returnjo.put("code", "1"); - returnjo.put("desc", TaskSendBackStatusEnum.getName(resultflag)); - return returnjo; - } - } - //4返回休息点 - if(StrUtil.equals(button_code, "4")) { - TaskServiceServiceImpl taskServiceServiceImpl = new TaskServiceServiceImpl(); - //查询有没有正在执行的任务,假如有不能返回生成任务 - JSONObject doingtaskjo = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 and task_status='01' ").uniqueResult(0); - if(ObjectUtil.isNotEmpty(doingtaskjo)) { - returnjo.put("code", "0"); - returnjo.put("desc", "有正在执行的任务,不能生成返回休息点的任务"); - return returnjo; - } - String rest_pointcode = (String) taskServiceServiceImpl.queryPoint(new HashMap<>()).get("rest_pointcode"); - JSONObject taskjo = new JSONObject(); - taskjo.put("task_uuid", IdUtil.simpleUUID()); - taskjo.put("task_code", CodeUtil.getNewCode("TASK_NO")); - taskjo.put("task_status", "00"); - taskjo.put("task_status_name", "生成未执行"); - taskjo.put("next_point_code", rest_pointcode); - taskjo.put("task_type", "2"); - taskjo.put("is_delete", "0"); - taskjo.put("seq_num", "1"); - taskjo.put("create_by", SecurityUtils.getCurrentNickName()); - taskjo.put("date", DateUtil.today()); - taskjo.put("create_time", DateUtil.now()); - taskjo.put("is_agvfinished", "0"); - taskjo.put("is_manualfinished", "0"); - //下发这个任务 - String a = "HMIStepOrRTPathFollow:0;" + taskjo.getString("next_point_code") + ";1#"; - ServiceResponse send = sendToAgvUtil.send(a); - JSONObject resjo = JSONObject.parseObject(send.toString()); - String resultflag = resjo.getString("result"); - if(StrUtil.equals("0", resultflag)) { - //改变任务的状态 - taskjo.put("task_status", "01"); - taskjo.put("update_by", SecurityUtils.getCurrentNickName()); - taskjo.put("task_status_name", "执行中"); - } - else{ - returnjo.put("code", "1"); - returnjo.put("desc", TaskSendBackStatusEnum.getName(resultflag)); - return returnjo; - } - WQLObject.getWQLObject("ST_TASK_INFO").insert(taskjo); - } - returnjo.put("code", "1"); - returnjo.put("desc", "操作成功"); - return returnjo; - } + @Override + public Map clickSave(Map jsonObject) { + WQLObject taskTable = WQLObject.getWQLObject("ST_TASK_INFO"); + String button_code = (String) jsonObject.get("button_code"); + JSONObject returnjo = new JSONObject(); + //1确认完成 + if (StrUtil.equals(button_code, "1")) { + JSONObject taskjo = taskTable.query("is_delete='0' and task_status='02' and task_type!='2' and is_manualfinished='0'").uniqueResult(0); + if (ObjectUtil.isEmpty(taskjo)) { + throw new BadRequestException("未找到任务"); + } + taskjo.put("is_manualfinished", "1"); + taskjo.put("update_by", SecurityUtils.getCurrentNickName()); + taskTable.update(taskjo); + } + // 2确认完成继续下个任务 + if (StrUtil.equals(button_code, "2")) { + JSONObject taskjo = taskTable.query("is_delete='0' and task_status='02' and task_type!='2' and is_manualfinished='0'").uniqueResult(0); + if (ObjectUtil.isEmpty(taskjo)) { + returnjo.put("code", "1"); + returnjo.put("desc", "未找到任务"); + return returnjo; + } + taskjo.put("is_manualfinished", "1"); + taskjo.put("update_by", SecurityUtils.getCurrentNickName()); + taskTable.update(taskjo); + //下发下一个任务 + JSONObject nexttaskjo = taskTable.query("is_delete='0' and task_status='00' and task_type!='2' ", "seq_num").uniqueResult(0); + if (ObjectUtil.isEmpty(nexttaskjo)) { + returnjo.put("code", "1"); + returnjo.put("desc", "未找到任务"); + return returnjo; + } + String a = "HMIStepOrRTPathFollow:0;" + nexttaskjo.getString("next_point_code") + ";1#"; + ServiceResponse send = sendToAgvUtil.send(a); + JSONObject resjo = JSONObject.parseObject(send.toString()); + String resultflag = resjo.getString("result"); + if (StrUtil.equals("0", resultflag)) { + //改变任务的状态 + nexttaskjo.put("task_status", "01"); + nexttaskjo.put("task_status_name", "执行中"); + nexttaskjo.put("update_by", SecurityUtils.getCurrentNickName()); + WQLObject.getWQLObject("ST_TASK_INFO").update(nexttaskjo); + } else { + returnjo.put("code", "1"); + returnjo.put("desc", TaskSendBackStatusEnum.getName(resultflag)); + return returnjo; + } + } + //3继续搬运 + if (StrUtil.equals(button_code, "3")) { + JSONObject nexttaskjo = taskTable.query("is_delete='0' and task_status='00' and task_type!='2' ", "seq_num").uniqueResult(0); + if (ObjectUtil.isEmpty(nexttaskjo)) { + throw new BadRequestException("未找到任务"); + } + //下发这个任务 + String a = "HMIStepOrRTPathFollow:0;" + nexttaskjo.getString("next_point_code") + ";1#"; + ServiceResponse send = sendToAgvUtil.send(a); + JSONObject resjo = JSONObject.parseObject(send.toString()); + String resultflag = resjo.getString("result"); + if (StrUtil.equals("0", resultflag)) { + //改变任务的状态 + nexttaskjo.put("task_status", "01"); + nexttaskjo.put("task_status_name", "执行中"); + nexttaskjo.put("update_by", SecurityUtils.getCurrentNickName()); + WQLObject.getWQLObject("ST_TASK_INFO").update(nexttaskjo); + } else { + returnjo.put("code", "1"); + returnjo.put("desc", TaskSendBackStatusEnum.getName(resultflag)); + return returnjo; + } + } + //4返回休息点 + if (StrUtil.equals(button_code, "4")) { + TaskServiceServiceImpl taskServiceServiceImpl = new TaskServiceServiceImpl(); + //查询有没有正在执行的任务,假如有不能生成返回任务 + JSONObject doingtaskjo = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete= 0 and task_status='01' ").uniqueResult(0); + if (ObjectUtil.isNotEmpty(doingtaskjo)) { + returnjo.put("code", "0"); + returnjo.put("desc", "有正在执行的任务,不能生成返回休息点的任务"); + return returnjo; + } + String rest_pointcode = (String) taskServiceServiceImpl.queryPoint(new HashMap<>()).get("rest_pointcode"); + JSONObject taskjo = new JSONObject(); + taskjo.put("task_uuid", IdUtil.simpleUUID()); + taskjo.put("task_code", CodeUtil.getNewCode("TASK_NO")); + taskjo.put("task_status", "00"); + taskjo.put("task_status_name", "生成未执行"); + taskjo.put("next_point_code", rest_pointcode); + taskjo.put("task_type", "2"); + taskjo.put("is_delete", "0"); + taskjo.put("seq_num", "1"); + taskjo.put("create_by", SecurityUtils.getCurrentNickName()); + taskjo.put("date", DateUtil.today()); + taskjo.put("create_time", DateUtil.now()); + taskjo.put("is_agvfinished", "0"); + taskjo.put("is_manualfinished", "0"); + //下发这个任务 + String a = "HMIStepOrRTPathFollow:0;" + taskjo.getString("next_point_code") + ";1#"; + ServiceResponse send = sendToAgvUtil.send(a); + JSONObject resjo = JSONObject.parseObject(send.toString()); + String resultflag = resjo.getString("result"); + if (StrUtil.equals("0", resultflag)) { + //改变任务的状态 + taskjo.put("task_status", "01"); + taskjo.put("update_by", SecurityUtils.getCurrentNickName()); + taskjo.put("task_status_name", "执行中"); + } else { + returnjo.put("code", "1"); + returnjo.put("desc", TaskSendBackStatusEnum.getName(resultflag)); + return returnjo; + } + WQLObject.getWQLObject("ST_TASK_INFO").insert(taskjo); + } + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功"); + return returnjo; + } + + /** + * 已合并至queryHomePage + */ + @Override + public Map queryHead(Map jsonObject) { + JSONObject returnjo = new JSONObject(); + JSONObject result = new JSONObject(); + String agvrun_status_name = ""; + String automatic_status_name = ""; + //车辆运行还是待机是PathFollow_Enable 1为运行 0为待机 + String agvrun_status = debugInfoJson.getString("PathFollow_Enable"); + if (StrUtil.equals(agvrun_status, "1")) { + automatic_status_name = "运行"; + } + if (StrUtil.equals(agvrun_status, "0")) { + automatic_status_name = "待机"; + } + //手自动是Sys_Mode 3 REMA手动 4自动 5 IO手持方式的手动,这个车不装 + String automatic_status = debugInfoJson.getString("Sys_Mode"); + if (StrUtil.equals(automatic_status, "3")) { + agvrun_status_name = "手动"; + } + if (StrUtil.equals(automatic_status, "4")) { + agvrun_status_name = "自动"; + } + if (StrUtil.equals(automatic_status, "5")) { + agvrun_status_name = "IO手持方式的手动"; + } + result.put("agvrun_status", agvrun_status); + result.put("agvrun_status_name", agvrun_status_name); + result.put("automatic_status", automatic_status); + result.put("automatic_status_name", automatic_status_name); + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功"); + returnjo.put("result", result); + return returnjo; + } + + @Override + public void qeryDebuggerInfo() { + //todo RosJons模拟数据用,正式需改回 + //String result1 = HttpUtil.get("http://localhost:8011/api/pcsIfPurchaseorder/queryApt"); + try { + Map urlInfo = RosUtil.getRosHostInfo(); + String result; + if ("prod".equals(isProd)) { + result = HttpUtil.get(urlInfo.get("javaUrl")); + } else { + result = "{\"Msg_DisplayState\":{\"AGV_ID\":255,\"Auto_In_Line_State\":0,\"Bosch_Car_Global_Theta\":-90.19221757272916,\"Bosch_Car_Global_rx\":-1.0619603784858553,\"Bosch_Car_Global_ry\":0.0020978358374357303,\"Bosch_Loc_State\":-2,\"Bosch_No_Rec_State\":0,\"Bosch_raw_age\":0.01389455795288086,\"Bosch_raw_epoch\":1,\"Bosch_raw_locState\":-2,\"Bosch_raw_qw\":0.9999999908132869,\"Bosch_raw_qx\":0.0,\"Bosch_raw_qy\":0.0,\"Bosch_raw_qz\":0.00013554861104682667,\"Bosch_raw_timestamp\":1695633231.1093392,\"Bosch_raw_uniqueId\":0,\"Bosch_raw_x\":0.0008994877773440588,\"Bosch_raw_x_odo\":0.0008994877773440588,\"Bosch_raw_y\":0.0006906610801896382,\"Bosch_raw_y_odo\":0.0006906610801896382,\"Bosch_raw_yaw\":0.00027109722292381746,\"Bosch_raw_yaw_odo\":0.0006906610801896382,\"Bosch_raw_z\":0.0,\"CAD_Or_TCS_Ctrl\":0,\"Car_Global_Theta\":-90.19221757272916,\"Car_Global_rx\":-1.0619603784858553,\"Car_Global_ry\":0.0020978358374357303,\"CurNodeID\":11,\"Cur_Stop_Info1_Authorized_Pass\":1,\"Cur_Stop_Info1_High_Precious_Enable\":1,\"Cur_Stop_Info1_Reached_Stop\":0,\"Cur_Stop_Info1_Set_Patht\":0.0,\"Cur_Stop_Info1_Set_Pathx\":0.0,\"Cur_Stop_Info1_Set_Pathy\":0.0,\"Cur_Stop_Info1_Single_Request_Sch\":0,\"Cur_Stop_Info1_Single_Stop_Sch\":0,\"Cur_Stop_Info1_StopEndNode\":0,\"Cur_Stop_Info1_StopStartNode\":0,\"Cur_Stop_Info1_Stop_Endt\":0.0,\"Cur_Stop_Info1_Stop_Endx\":0.0,\"Cur_Stop_Info1_Stop_Endy\":0.0,\"Cur_Stop_Info1_Stop_Num\":0,\"Cur_Stop_Info2_Authorized_Pass\":1,\"Cur_Stop_Info2_High_Precious_Enable\":1,\"Cur_Stop_Info2_Reached_Stop\":0,\"Cur_Stop_Info2_Set_Patht\":0.0,\"Cur_Stop_Info2_Set_Pathx\":0.0,\"Cur_Stop_Info2_Set_Pathy\":0.0,\"Cur_Stop_Info2_Single_Request_Sch\":0,\"Cur_Stop_Info2_Single_Stop_Sch\":0,\"Cur_Stop_Info2_StopEndNode\":0,\"Cur_Stop_Info2_StopStartNode\":0,\"Cur_Stop_Info2_Stop_Endt\":0.0,\"Cur_Stop_Info2_Stop_Endx\":0.0,\"Cur_Stop_Info2_Stop_Endy\":0.0,\"Cur_Stop_Info2_Stop_Num\":0,\"Curtis_Warning_Code_Pump\":0,\"Curtis_Warning_Code_Speed\":82,\"Curtis_Warning_Code_Steer\":0,\"EndNode\":0,\"Env_CustomName\":\"NobleLift\",\"Env_HMIUseJavaApp\":\"true\",\"Env_LearnEnable\":\"true\",\"Env_Lu_ROS_IP2\":\"\",\"Env_SoftwareVersion\":\"[Version]Magic4.1[Info]2023_09_21_20_41_37_Lu_ROS_magic4_waypointab_v31\",\"Env_VehicleType\":\"PS10LMT_HuaHai\",\"Get_Nav350_Curr_Layer\":0,\"Language\":1022739087,\"LastAltitudeExpectValue_mm\":0,\"LastGantryXExpectValue_mm\":0,\"LastGantryYExpectValue_mm\":0,\"Lateral_Deviation_m\":0.0,\"License_Info\":\"EC060800FFFBEBBF 6B7685747EBC EC060800FFFBEBBF 6B7685747EBC 2021/8/26 13:46:47 2021/8/26 13:46:47 1 UserClass5 Magic4_1\",\"LindeAgwSteerCenterPivotPlateAng\":0,\"LindeAgwSteerErrorFlag\":0,\"LindeAgwSteerModeSelectorState\":0,\"LindeAgwTracLiftErrorFlag\":0,\"LindeAgwTracLiftModeSelectorState\":0,\"LindeDriveErrCode1\":0,\"LindeDriveErrCode2\":0,\"LindeDriveErrCode3\":0,\"LindeDriveErrCode4\":0,\"LindeLiftErrCode1\":0,\"LindeLiftErrCode2\":0,\"LindeLiftErrCode3\":0,\"LindeLiftErrCode4\":0,\"LindeSteerErrCode1\":0,\"LindeSteerErrCode2\":0,\"LindeSteerErrCode3\":0,\"LindeSteerErrCode4\":0,\"Login_Info\":\"\",\"Min_Dist\":0.0,\"MissionCompleteAltitude_mm_RemoteOrHMI_FB\":0,\"MissionCompleteGantryX_mm_RemoteOrHMI_FB\":0,\"MissionCompleteGantryY_mm_RemoteOrHMI_FB\":0,\"Navi_Method\":3,\"ObstacleDetectState\":0,\"ObstacleTouchState\":0,\"Out_Of_Path_Times\":0,\"PFC_Sch\":0,\"PFC_State\":\"[PathFollow_Control_Handle_WLANJSON][PathFollow_Schedule_WLANJSON=0]\\n\",\"PLC_Warning_Code\":0,\"PWR_Percent\":100,\"PWR_Warn\":0,\"PathFollow_Enable\":0,\"PathFollow_Expect_AltitudeCtrlEnable\":0,\"PathFollow_Expect_GantryXCtrlEnable\":0,\"PathFollow_Expect_GantryYCtrlEnable\":0,\"Plate_Check_Err_Code\":0,\"ReachState\":0,\"RealAutoChargeState\":0,\"Ref_std_rt\":0.0,\"Ref_std_rx\":0.0,\"Ref_std_ry\":0.0,\"Remote_Or_HMI_Ctrl\":1,\"SVreal_angle\":0.0,\"Sche_JSON_Sche_Enable\":0,\"Speedm_Tmp\":0.0,\"StartNode\":0,\"Sub_Warning_Code0\":0,\"Sys_Mode\":4,\"Task_Sch\":0,\"Task_State\":\"\",\"Update_Sch\":0,\"Update_State\":\"\",\"VehicleCtrlExpThrottle\":0,\"VehicleCtrlRealAltitude_mm\":998,\"VehicleCtrlRealCustomStateByte0\":0,\"VehicleCtrlRealCustomStateByte1\":0,\"VehicleCtrlRealCustomStateByte2\":0,\"VehicleCtrlRealCustomStateByte3\":0,\"VehicleCtrlRealGantryX_mm\":0,\"VehicleCtrlRealGantryY_mm\":0,\"VehicleCtrlRealJoyEnable\":0,\"VehicleCtrlRealRCEnable\":0,\"VehicleCtrl_CAN_Err_Info\":0,\"Vertical_Deviation_deg\":0.0,\"Warning_Code\":754529,\"header\":{\"frame_id\":\"\",\"seq\":1904,\"stamp\":{\"nsec\":160948865,\"sec\":1695633231}}}}"; + } + JSONObject json = JSONObject.parseObject(result); + JSONObject jo = JSONObject.parseObject(json.getString("Msg_DisplayState")); + debugInfoJson.put("Msg_Timestamp", jo.getJSONObject("header").getJSONObject("stamp").getString("sec")); + debugInfoJson.put("AGV_ID", jo.getString("AGV_ID")); + debugInfoJson.put("Sys_Mode", jo.getString("Sys_Mode")); + debugInfoJson.put("screen", jo.getString("Remote_Or_HMI_Ctrl")); + debugInfoJson.put("tcs", jo.getString("CAD_Or_TCS_Ctrl")); + debugInfoJson.put("sche", jo.getString("Sche_JSON_Sche_Enable")); + debugInfoJson.put("rc", jo.getString("VehicleCtrlRealRCEnable")); + debugInfoJson.put("joy", jo.getString("VehicleCtrlRealJoyEnable")); + debugInfoJson.put("VehicleCtrlExpThrottle", jo.getString("VehicleCtrlExpThrottle")); + debugInfoJson.put("Warning_Code", jo.getString("Warning_Code")); + debugInfoJson.put("Car_Global_rx", jo.getString("Car_Global_rx")); + debugInfoJson.put("Car_Global_ry", jo.getString("Car_Global_ry")); + debugInfoJson.put("Car_Global_Theta", jo.getString("Car_Global_Theta")); + debugInfoJson.put("Lateral_Deviation_m", jo.getString("Lateral_Deviation_m")); + debugInfoJson.put("Vertical_Deviation_deg", jo.getString("Vertical_Deviation_deg")); + debugInfoJson.put("Out_Of_Path_Times", jo.getString("Out_Of_Path_Times")); + debugInfoJson.put("PLC_Warning_Code", jo.getString("PLC_Warning_Code")); + debugInfoJson.put("Min_Dist", jo.getString("Min_Dist")); + debugInfoJson.put("Auto_In_Line_State", jo.getString("Auto_In_Line_State")); + debugInfoJson.put("PathFollow_Enable", jo.getString("PathFollow_Enable")); + debugInfoJson.put("StartNode", jo.getString("StartNode")); + debugInfoJson.put("EndNode", jo.getString("EndNode")); + debugInfoJson.put("RealAutoChargeState", jo.getString("RealAutoChargeState")); + debugInfoJson.put("PWR_Percent", jo.getString("PWR_Percent")); + debugInfoJson.put("SVreal_angle", jo.getString("SVreal_angle")); + debugInfoJson.put("Speedm_Tmp", jo.getString("Speedm_Tmp")); + debugInfoJson.put("VehicleCtrlRealAltitude_mm", jo.getString("VehicleCtrlRealAltitude_mm")); + debugInfoJson.put("ReachState", jo.getString("ReachState")); + debugInfoJson.put("ObstacleDetectState", jo.getString("ObstacleDetectState")); + debugInfoJson.put("ObstacleTouchState", jo.getString("ObstacleTouchState")); + debugInfoJson.put("PWR_Warn", jo.getString("PWR_Warn")); + debugInfoJson.put("VehicleCtrl_CAN_Err_Info", jo.getString("VehicleCtrl_CAN_Err_Info")); + debugInfoJson.put("Curtis_Warning_Code_Speed", jo.getString("Curtis_Warning_Code_Speed")); + debugInfoJson.put("Curtis_Warning_Code_Steer", jo.getString("Curtis_Warning_Code_Steer")); + debugInfoJson.put("VehicleCtrlRealCustomStateByte0", jo.getString("VehicleCtrlRealCustomStateByte0")); + debugInfoJson.put("VehicleCtrlRealCustomStateByte1", jo.getString("VehicleCtrlRealCustomStateByte1")); + debugInfoJson.put("VehicleCtrlRealCustomStateByte2", jo.getString("VehicleCtrlRealCustomStateByte2")); + debugInfoJson.put("VehicleCtrlRealCustomStateByte3", jo.getString("VehicleCtrlRealCustomStateByte3")); + debugInfoJson.put("MissionCompleteAltitude_mm_RemoteOrHMI_FB", jo.getString("MissionCompleteAltitude_mm_RemoteOrHMI_FB")); + debugInfoJson.put("LastAltitudeExpectValue_mm", jo.getString("LastAltitudeExpectValue_mm")); + debugInfoJson.put("Get_Nav350_Curr_Layer", jo.getString("Get_Nav350_Curr_Layer")); + debugInfoJson.put("Update_Sch", jo.getString("Update_Sch")); + debugInfoJson.put("Update_State", jo.getString("Update_State")); + debugInfoJson.put("Task_Sch", jo.getString("Task_Sch")); + debugInfoJson.put("Task_State", jo.getString("Task_State")); + debugInfoJson.put("PFC_Sch", jo.getString("PFC_Sch")); + debugInfoJson.put("PFC_State", jo.getString("PFC_State")); + debugInfoJson.put("License_Info", jo.getString("License_Info")); + debugInfoJson.put("Env_CustomName", jo.getString("Env_CustomName")); + debugInfoJson.put("Env_VehicleType", jo.getString("Env_VehicleType")); + debugInfoJson.put("Env_SoftwareVersion", jo.getString("Env_SoftwareVersion")); + debugInfoJson.put("Remote_Or_HMI_Ctrl", jo.getString("Remote_Or_HMI_Ctrl")); + debugInfoJson.put("CAD_Or_TCS_Ctrl", jo.getString("CAD_Or_TCS_Ctrl")); + debugInfoJson.put("Sche_JSON_Sche_Enable", jo.getString("Sche_JSON_Sche_Enable")); + debugInfoJson.put("VehicleCtrlRealRCEnable", jo.getString("VehicleCtrlRealRCEnable")); + debugInfoJson.put("VehicleCtrlRealJoyEnable", jo.getString("VehicleCtrlRealJoyEnable")); + debugInfoJson.put("CurNodeID", jo.getString("CurNodeID")); + //handleTaskStatus; + } catch (Exception e) { + Log.error("通信失败:" + e.getMessage()); + throw new BadRequestException(e.getMessage() == null ? "通信失败,请检查系统参数中的Ros连接信息" : e.getMessage()); + } + } + + @Transactional(rollbackFor = Exception.class) + public void handleTaskStatus() { + qeryDebuggerInfo(); + JSONObject taskjo = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete='0'and task_status='01'").uniqueResult(0); + //小车停止,且已到达目标点位 + if (ObjectUtil.isNotEmpty(taskjo) && StrUtil.equals("0", debugInfoJson.getString("PathFollow_Enable")) && debugInfoJson.getString("CurNodeID").equals(taskjo.getString("next_point_code"))) { + //叉腿高度 + String legHeight = debugInfoJson.getString("MissionCompleteAltitude_mm_RemoteOrHMI_FB") == null ? "0" : debugInfoJson.getString("MissionCompleteAltitude_mm_RemoteOrHMI_FB"); + legHeight = "20"; + Map jsonObject = new HashMap<>(); + //普通任务 + if (TaskTypeEnum.COMMON.getCode().equals(taskjo.getString("task_type"))) { + updateTaskStatus(taskjo, TaskStatusEnum.END); + } else if (TaskTypeEnum.TAKE.getCode().equals(taskjo.getString("task_type")) || TaskTypeEnum.PUT.getCode().equals(taskjo.getString("task_type"))) { + //取货 + if (TaskTypeEnum.TAKE.getCode().equals(taskjo.getString("task_type"))) { + //已到达目标点 + if (StringUtils.isBlank(taskjo.getString("step"))) { + //取货 + //ServiceResponse send = sendToAgvUtil.send("HMIStepOrRTPathFollow:0;2;0#"); + //叉腿已抬升 + taskjo.put("step", "0"); + updateTaskStatus(taskjo, null); + } + } else { + if (StringUtils.isBlank(taskjo.getString("step"))) { + //放货 + //ServiceResponse send = sendToAgvUtil.send("HMIStepOrRTPathFollow:0;1;0#"); + //叉腿已抬升 + taskjo.put("step", "0"); + updateTaskStatus(taskjo, null); + } + } + //叉腿抬高动作已下发,且高度为10或20且待机,发送返程任务 + if ((Integer.parseInt(legHeight) == 20 || Integer.parseInt(legHeight) == 10) && "0".equals(taskjo.getString("step"))) { + //返程任务已下发 + taskjo.put("step", "1"); + updateTaskStatus(taskjo, TaskStatusEnum.END); + jsonObject.put("type", TaskTypeEnum.RETURN.getCode()); + jsonObject.put("point_code", taskjo.getString("next_point_code2")); + taskServiceServiceImpl.confirmPoint1(jsonObject); + } + } + } + } + + @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) + public void updateTaskStatus(JSONObject taskjo, TaskStatusEnum statusEnum) { + if (statusEnum != null) { + taskjo.put("task_status", statusEnum.getCode()); + taskjo.put("task_status_name", statusEnum.getName()); + } + taskjo.put("update_time", DateUtil.now()); + taskjo.put("update_by", SecurityUtils.getCurrentNickName()); + WQLObject.getWQLObject("ST_TASK_INFO").update(taskjo); + } + + /** + * 处理任务状态 + */ + @Async("taskExecutor") + @Scheduled(cron = "0/10 * * * * *") + @Transactional(rollbackFor = Exception.class) + public void handleTaskStatuss() { + //StopWatch stopWatch = new StopWatch(); + //stopWatch.start(); + //handleTaskStatus(); + //stopWatch.stop(); + //System.out.println("花费时间------------------------------------------------------------------------------------------*************************************************************************************************= totalTime = " + stopWatch.getTotalTimeMillis()); + } - /** - * 已合并至queryHomePage - */ - @Override - public Map queryHead(Map jsonObject) { - JSONObject returnjo = new JSONObject(); - JSONObject result = new JSONObject(); - String agvrun_status_name = ""; - String automatic_status_name = ""; - //车辆运行还是待机是PathFollow_Enable 1为运行 0为待机 - String agvrun_status = debugInfoJson.getString("PathFollow_Enable"); - if(StrUtil.equals(agvrun_status, "1")) { - automatic_status_name = "运行"; - } - if(StrUtil.equals(agvrun_status, "0")) { - automatic_status_name = "待机"; - } - //手自动是Sys_Mode 3 REMA手动 4自动 5 IO手持方式的手动,这个车不装 - String automatic_status = debugInfoJson.getString("Sys_Mode"); - if(StrUtil.equals(automatic_status, "3")) { - agvrun_status_name = "手动"; - } - if(StrUtil.equals(automatic_status, "4")) { - agvrun_status_name = "自动"; - } - if(StrUtil.equals(automatic_status, "5")) { - agvrun_status_name = "IO手持方式的手动"; - } - result.put("agvrun_status", agvrun_status); - result.put("agvrun_status_name", agvrun_status_name); - result.put("automatic_status", automatic_status); - result.put("automatic_status_name", automatic_status_name); - returnjo.put("code", "1"); - returnjo.put("desc", "操作成功"); - returnjo.put("result", result); - return returnjo; - } - - @Override - public void qeryDebuggerInfo() { - Map urlInfo = RosUtil.getRosHostInfo(); - //todo RosJons模拟数据用,正式需改回 - //String result1 = HttpUtil.get("http://localhost:8011/api/pcsIfPurchaseorder/queryApt"); - //String result1 = "{\"Msg_DisplayState\":{\"AGV_ID\":255,\"Auto_In_Line_State\":0,\"Bosch_Car_Global_Theta\":-90.19221757272916,\"Bosch_Car_Global_rx\":-1.0619603784858553,\"Bosch_Car_Global_ry\":0.0020978358374357303,\"Bosch_Loc_State\":-2,\"Bosch_No_Rec_State\":0,\"Bosch_raw_age\":0.01389455795288086,\"Bosch_raw_epoch\":1,\"Bosch_raw_locState\":-2,\"Bosch_raw_qw\":0.9999999908132869,\"Bosch_raw_qx\":0.0,\"Bosch_raw_qy\":0.0,\"Bosch_raw_qz\":0.00013554861104682667,\"Bosch_raw_timestamp\":1695633231.1093392,\"Bosch_raw_uniqueId\":0,\"Bosch_raw_x\":0.0008994877773440588,\"Bosch_raw_x_odo\":0.0008994877773440588,\"Bosch_raw_y\":0.0006906610801896382,\"Bosch_raw_y_odo\":0.0006906610801896382,\"Bosch_raw_yaw\":0.00027109722292381746,\"Bosch_raw_yaw_odo\":0.0006906610801896382,\"Bosch_raw_z\":0.0,\"CAD_Or_TCS_Ctrl\":0,\"Car_Global_Theta\":-90.19221757272916,\"Car_Global_rx\":-1.0619603784858553,\"Car_Global_ry\":0.0020978358374357303,\"CurNodeID\":2,\"Cur_Stop_Info1_Authorized_Pass\":1,\"Cur_Stop_Info1_High_Precious_Enable\":1,\"Cur_Stop_Info1_Reached_Stop\":0,\"Cur_Stop_Info1_Set_Patht\":0.0,\"Cur_Stop_Info1_Set_Pathx\":0.0,\"Cur_Stop_Info1_Set_Pathy\":0.0,\"Cur_Stop_Info1_Single_Request_Sch\":0,\"Cur_Stop_Info1_Single_Stop_Sch\":0,\"Cur_Stop_Info1_StopEndNode\":0,\"Cur_Stop_Info1_StopStartNode\":0,\"Cur_Stop_Info1_Stop_Endt\":0.0,\"Cur_Stop_Info1_Stop_Endx\":0.0,\"Cur_Stop_Info1_Stop_Endy\":0.0,\"Cur_Stop_Info1_Stop_Num\":0,\"Cur_Stop_Info2_Authorized_Pass\":1,\"Cur_Stop_Info2_High_Precious_Enable\":1,\"Cur_Stop_Info2_Reached_Stop\":0,\"Cur_Stop_Info2_Set_Patht\":0.0,\"Cur_Stop_Info2_Set_Pathx\":0.0,\"Cur_Stop_Info2_Set_Pathy\":0.0,\"Cur_Stop_Info2_Single_Request_Sch\":0,\"Cur_Stop_Info2_Single_Stop_Sch\":0,\"Cur_Stop_Info2_StopEndNode\":0,\"Cur_Stop_Info2_StopStartNode\":0,\"Cur_Stop_Info2_Stop_Endt\":0.0,\"Cur_Stop_Info2_Stop_Endx\":0.0,\"Cur_Stop_Info2_Stop_Endy\":0.0,\"Cur_Stop_Info2_Stop_Num\":0,\"Curtis_Warning_Code_Pump\":0,\"Curtis_Warning_Code_Speed\":82,\"Curtis_Warning_Code_Steer\":0,\"EndNode\":0,\"Env_CustomName\":\"NobleLift\",\"Env_HMIUseJavaApp\":\"true\",\"Env_LearnEnable\":\"true\",\"Env_Lu_ROS_IP2\":\"\",\"Env_SoftwareVersion\":\"[Version]Magic4.1[Info]2023_09_21_20_41_37_Lu_ROS_magic4_waypointab_v31\",\"Env_VehicleType\":\"PS10LMT_HuaHai\",\"Get_Nav350_Curr_Layer\":0,\"Language\":1022739087,\"LastAltitudeExpectValue_mm\":0,\"LastGantryXExpectValue_mm\":0,\"LastGantryYExpectValue_mm\":0,\"Lateral_Deviation_m\":0.0,\"License_Info\":\"EC060800FFFBEBBF 6B7685747EBC EC060800FFFBEBBF 6B7685747EBC 2021/8/26 13:46:47 2021/8/26 13:46:47 1 UserClass5 Magic4_1\",\"LindeAgwSteerCenterPivotPlateAng\":0,\"LindeAgwSteerErrorFlag\":0,\"LindeAgwSteerModeSelectorState\":0,\"LindeAgwTracLiftErrorFlag\":0,\"LindeAgwTracLiftModeSelectorState\":0,\"LindeDriveErrCode1\":0,\"LindeDriveErrCode2\":0,\"LindeDriveErrCode3\":0,\"LindeDriveErrCode4\":0,\"LindeLiftErrCode1\":0,\"LindeLiftErrCode2\":0,\"LindeLiftErrCode3\":0,\"LindeLiftErrCode4\":0,\"LindeSteerErrCode1\":0,\"LindeSteerErrCode2\":0,\"LindeSteerErrCode3\":0,\"LindeSteerErrCode4\":0,\"Login_Info\":\"\",\"Min_Dist\":0.0,\"MissionCompleteAltitude_mm_RemoteOrHMI_FB\":0,\"MissionCompleteGantryX_mm_RemoteOrHMI_FB\":0,\"MissionCompleteGantryY_mm_RemoteOrHMI_FB\":0,\"Navi_Method\":3,\"ObstacleDetectState\":0,\"ObstacleTouchState\":0,\"Out_Of_Path_Times\":0,\"PFC_Sch\":0,\"PFC_State\":\"[PathFollow_Control_Handle_WLANJSON][PathFollow_Schedule_WLANJSON=0]\\n\",\"PLC_Warning_Code\":0,\"PWR_Percent\":100,\"PWR_Warn\":0,\"PathFollow_Enable\":1,\"PathFollow_Expect_AltitudeCtrlEnable\":0,\"PathFollow_Expect_GantryXCtrlEnable\":0,\"PathFollow_Expect_GantryYCtrlEnable\":0,\"Plate_Check_Err_Code\":0,\"ReachState\":0,\"RealAutoChargeState\":0,\"Ref_std_rt\":0.0,\"Ref_std_rx\":0.0,\"Ref_std_ry\":0.0,\"Remote_Or_HMI_Ctrl\":1,\"SVreal_angle\":0.0,\"Sche_JSON_Sche_Enable\":0,\"Speedm_Tmp\":0.0,\"StartNode\":0,\"Sub_Warning_Code0\":0,\"Sys_Mode\":4,\"Task_Sch\":0,\"Task_State\":\"\",\"Update_Sch\":0,\"Update_State\":\"\",\"VehicleCtrlExpThrottle\":0,\"VehicleCtrlRealAltitude_mm\":998,\"VehicleCtrlRealCustomStateByte0\":0,\"VehicleCtrlRealCustomStateByte1\":0,\"VehicleCtrlRealCustomStateByte2\":0,\"VehicleCtrlRealCustomStateByte3\":0,\"VehicleCtrlRealGantryX_mm\":0,\"VehicleCtrlRealGantryY_mm\":0,\"VehicleCtrlRealJoyEnable\":0,\"VehicleCtrlRealRCEnable\":0,\"VehicleCtrl_CAN_Err_Info\":0,\"Vertical_Deviation_deg\":0.0,\"Warning_Code\":754529,\"header\":{\"frame_id\":\"\",\"seq\":1904,\"stamp\":{\"nsec\":160948865,\"sec\":1695633231}}}}"; - //JSONObject json = JSONObject.parseObject(result1); - try { - String result = HttpUtil.get(urlInfo.get("javaUrl")); - JSONObject json = JSONObject.parseObject(result); - JSONObject jo = JSONObject.parseObject(json.getString("Msg_DisplayState")); - debugInfoJson.put("Msg_Timestamp", jo.getJSONObject("header").getJSONObject("stamp").getString("sec")); - debugInfoJson.put("AGV_ID", jo.getString("AGV_ID")); - debugInfoJson.put("Sys_Mode", jo.getString("Sys_Mode")); - debugInfoJson.put("screen", jo.getString("Remote_Or_HMI_Ctrl")); - debugInfoJson.put("tcs", jo.getString("CAD_Or_TCS_Ctrl")); - debugInfoJson.put("sche", jo.getString("Sche_JSON_Sche_Enable")); - debugInfoJson.put("rc", jo.getString("VehicleCtrlRealRCEnable")); - debugInfoJson.put("joy", jo.getString("VehicleCtrlRealJoyEnable")); - debugInfoJson.put("VehicleCtrlExpThrottle", jo.getString("VehicleCtrlExpThrottle")); - debugInfoJson.put("Warning_Code", jo.getString("Warning_Code")); - debugInfoJson.put("Car_Global_rx", jo.getString("Car_Global_rx")); - debugInfoJson.put("Car_Global_ry", jo.getString("Car_Global_ry")); - debugInfoJson.put("Car_Global_Theta", jo.getString("Car_Global_Theta")); - debugInfoJson.put("Lateral_Deviation_m", jo.getString("Lateral_Deviation_m")); - debugInfoJson.put("Vertical_Deviation_deg", jo.getString("Vertical_Deviation_deg")); - debugInfoJson.put("Out_Of_Path_Times", jo.getString("Out_Of_Path_Times")); - debugInfoJson.put("PLC_Warning_Code", jo.getString("PLC_Warning_Code")); - debugInfoJson.put("Min_Dist", jo.getString("Min_Dist")); - debugInfoJson.put("Auto_In_Line_State", jo.getString("Auto_In_Line_State")); - debugInfoJson.put("PathFollow_Enable", jo.getString("PathFollow_Enable")); - debugInfoJson.put("StartNode", jo.getString("StartNode")); - debugInfoJson.put("EndNode", jo.getString("EndNode")); - debugInfoJson.put("RealAutoChargeState", jo.getString("RealAutoChargeState")); - debugInfoJson.put("PWR_Percent", jo.getString("PWR_Percent")); - debugInfoJson.put("SVreal_angle", jo.getString("SVreal_angle")); - debugInfoJson.put("Speedm_Tmp", jo.getString("Speedm_Tmp")); - debugInfoJson.put("VehicleCtrlRealAltitude_mm", jo.getString("VehicleCtrlRealAltitude_mm")); - debugInfoJson.put("ReachState", jo.getString("ReachState")); - debugInfoJson.put("ObstacleDetectState", jo.getString("ObstacleDetectState")); - debugInfoJson.put("ObstacleTouchState", jo.getString("ObstacleTouchState")); - debugInfoJson.put("PWR_Warn", jo.getString("PWR_Warn")); - debugInfoJson.put("VehicleCtrl_CAN_Err_Info", jo.getString("VehicleCtrl_CAN_Err_Info")); - debugInfoJson.put("Curtis_Warning_Code_Speed", jo.getString("Curtis_Warning_Code_Speed")); - debugInfoJson.put("Curtis_Warning_Code_Steer", jo.getString("Curtis_Warning_Code_Steer")); - debugInfoJson.put("VehicleCtrlRealCustomStateByte0", jo.getString("VehicleCtrlRealCustomStateByte0")); - debugInfoJson.put("VehicleCtrlRealCustomStateByte1", jo.getString("VehicleCtrlRealCustomStateByte1")); - debugInfoJson.put("VehicleCtrlRealCustomStateByte2", jo.getString("VehicleCtrlRealCustomStateByte2")); - debugInfoJson.put("VehicleCtrlRealCustomStateByte3", jo.getString("VehicleCtrlRealCustomStateByte3")); - debugInfoJson.put("LastAltitudeExpectValue_mm", jo.getString("LastAltitudeExpectValue_mm")); - debugInfoJson.put("Get_Nav350_Curr_Layer", jo.getString("Get_Nav350_Curr_Layer")); - debugInfoJson.put("Update_Sch", jo.getString("Update_Sch")); - debugInfoJson.put("Update_State", jo.getString("Update_State")); - debugInfoJson.put("Task_Sch", jo.getString("Task_Sch")); - debugInfoJson.put("Task_State", jo.getString("Task_State")); - debugInfoJson.put("PFC_Sch", jo.getString("PFC_Sch")); - debugInfoJson.put("PFC_State", jo.getString("PFC_State")); - debugInfoJson.put("License_Info", jo.getString("License_Info")); - debugInfoJson.put("Env_CustomName", jo.getString("Env_CustomName")); - debugInfoJson.put("Env_VehicleType", jo.getString("Env_VehicleType")); - debugInfoJson.put("Env_SoftwareVersion", jo.getString("Env_SoftwareVersion")); - debugInfoJson.put("Remote_Or_HMI_Ctrl", jo.getString("Remote_Or_HMI_Ctrl")); - debugInfoJson.put("CAD_Or_TCS_Ctrl", jo.getString("CAD_Or_TCS_Ctrl")); - debugInfoJson.put("Sche_JSON_Sche_Enable", jo.getString("Sche_JSON_Sche_Enable")); - debugInfoJson.put("VehicleCtrlRealRCEnable", jo.getString("VehicleCtrlRealRCEnable")); - debugInfoJson.put("VehicleCtrlRealJoyEnable", jo.getString("VehicleCtrlRealJoyEnable")); - //小车当前点位,未到为起点,到达为终点 - debugInfoJson.put("CurNodeID", jo.getString("CurNodeID")); - String PathFollow_Enable = jo.getString("PathFollow_Enable"); - String curNodeId = jo.getString("CurNodeID"); - if(StrUtil.equals("0", PathFollow_Enable)) { - JSONObject taskjo = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete='0'and task_status='01'").uniqueResult(0); - if(ObjectUtil.isNotEmpty(taskjo)) { - //小车停止,且已到达目标点位 - if(curNodeId.equals(taskjo.getString("next_point_code"))) { - taskjo.put("task_status", TaskStatusEnum.END.getCode()); - taskjo.put("task_status_name", "任务完成"); - taskjo.put("update_time", DateUtil.now()); - taskjo.put("update_by", SecurityUtils.getCurrentNickName()); - WQLObject.getWQLObject("ST_TASK_INFO").update(taskjo); - } - } - } - debugInfoJson.put("PathFollow_Enable", PathFollow_Enable); - } - catch(Exception e) { - Log.error("通信失败:" + e.getMessage()); - throw new BadRequestException(e.getMessage() == null ? "通信失败,请检查系统参数中的Ros连接信息" : e.getMessage()); - } - } - // public void QueryDebuggerInfo2() { - // debugInfoJson = new JSONObject(); - // Ros ros = RosUtil.getRos(); - // Topic echoBack = new Topic(ros, "/Topic_Display_State", "lu_ps20l_msgs/Msg_DisplayState"); - // do { - // echoBack.subscribe(new TopicCallback(){ - // @Override - // public void handleMessage(Message message) { - // JSONObject jo = JSONObject.parseObject(message.toString()); - // debugInfoJson.put("Msg_Timestamp", jo.getJSONObject("header").getJSONObject("stamp").getString("secs")); - // debugInfoJson.put("AGV_ID", jo.getString("AGV_ID")); - // debugInfoJson.put("Sys_Mode", jo.getString("Sys_Mode")); - // debugInfoJson.put("VehicleCtrlExpThrottle", jo.getString("VehicleCtrlExpThrottle")); - // debugInfoJson.put("Warning_Code", jo.getString("Warning_Code")); - // debugInfoJson.put("Car_Global_rx", jo.getString("Car_Global_rx")); - // debugInfoJson.put("Car_Global_ry", jo.getString("Car_Global_ry")); - // debugInfoJson.put("Car_Global_Theta", jo.getString("Car_Global_Theta")); - // debugInfoJson.put("Lateral_Deviation_m", jo.getString("Lateral_Deviation_m")); - // debugInfoJson.put("Vertical_Deviation_deg", jo.getString("Vertical_Deviation_deg")); - // debugInfoJson.put("Out_Of_Path_Times", jo.getString("Out_Of_Path_Times")); - // debugInfoJson.put("PLC_Warning_Code", jo.getString("PLC_Warning_Code")); - // debugInfoJson.put("Min_Dist", jo.getString("Min_Dist")); - // debugInfoJson.put("Auto_In_Line_State", jo.getString("Auto_In_Line_State")); - // debugInfoJson.put("PathFollow_Enable", jo.getString("PathFollow_Enable")); - // debugInfoJson.put("StartNode", jo.getString("StartNode")); - // debugInfoJson.put("EndNode", jo.getString("EndNode")); - // debugInfoJson.put("RealAutoChargeState", jo.getString("RealAutoChargeState")); - // debugInfoJson.put("PWR_Percent", jo.getString("PWR_Percent")); - // debugInfoJson.put("SVreal_angle", jo.getString("SVreal_angle")); - // debugInfoJson.put("Speedm_Tmp", jo.getString("Speedm_Tmp")); - // debugInfoJson.put("VehicleCtrlRealAltitude_mm", jo.getString("VehicleCtrlRealAltitude_mm")); - // debugInfoJson.put("ReachState", jo.getString("ReachState")); - // debugInfoJson.put("ObstacleDetectState", jo.getString("ObstacleDetectState")); - // debugInfoJson.put("ObstacleTouchState", jo.getString("ObstacleTouchState")); - // debugInfoJson.put("PWR_Warn", jo.getString("PWR_Warn")); - // debugInfoJson.put("VehicleCtrl_CAN_Err_Info", jo.getString("VehicleCtrl_CAN_Err_Info")); - // debugInfoJson.put("Curtis_Warning_Code_Speed", jo.getString("Curtis_Warning_Code_Speed")); - // debugInfoJson.put("Curtis_Warning_Code_Steer", jo.getString("Curtis_Warning_Code_Steer")); - // debugInfoJson.put("VehicleCtrlRealCustomStateByte0", jo.getString("VehicleCtrlRealCustomStateByte0")); - // debugInfoJson.put("VehicleCtrlRealCustomStateByte1", jo.getString("VehicleCtrlRealCustomStateByte1")); - // debugInfoJson.put("VehicleCtrlRealCustomStateByte2", jo.getString("VehicleCtrlRealCustomStateByte2")); - // debugInfoJson.put("VehicleCtrlRealCustomStateByte3", jo.getString("VehicleCtrlRealCustomStateByte3")); - // debugInfoJson.put("LastAltitudeExpectValue_mm", jo.getString("LastAltitudeExpectValue_mm")); - // debugInfoJson.put("Get_Nav350_Curr_Layer", jo.getString("Get_Nav350_Curr_Layer")); - // debugInfoJson.put("Update_Sch", jo.getString("Update_Sch")); - // debugInfoJson.put("Update_State", jo.getString("Update_State")); - // debugInfoJson.put("Task_Sch", jo.getString("Task_Sch")); - // debugInfoJson.put("Task_State", jo.getString("Task_State")); - // debugInfoJson.put("PFC_Sch", jo.getString("PFC_Sch")); - // debugInfoJson.put("PFC_State", jo.getString("PFC_State")); - // debugInfoJson.put("License_Info", jo.getString("License_Info")); - // debugInfoJson.put("Env_CustomName", jo.getString("Env_CustomName")); - // debugInfoJson.put("Env_VehicleType", jo.getString("Env_VehicleType")); - // debugInfoJson.put("Env_SoftwareVersion", jo.getString("Env_SoftwareVersion")); - // String PathFollow_Enable = jo.getString("PathFollow_Enable"); - // if(StrUtil.equals("false", PathFollow_Enable)) { - // JSONObject taskjo = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete='0'and task_status='01'").uniqueResult(0); - // if(ObjectUtil.isNotEmpty(taskjo)) { - // taskjo.put("task_status", "02"); - // taskjo.put("task_status_name", "任务完成"); - // taskjo.put("update_time", DateUtil.now()); - // WQLObject.getWQLObject("ST_TASK_INFO").update(taskjo); - // } - // } - // debugInfoJson.put("PathFollow_Enable", PathFollow_Enable); - // echoBack.unsubscribe(); - // } - // }); - // } - // while(ObjectUtil.isEmpty(debugInfoJson)); - // } + // public void QueryDebuggerInfo2() { + // debugInfoJson = new JSONObject(); + // Ros ros = RosUtil.getRos(); + // Topic echoBack = new Topic(ros, "/Topic_Display_State", "lu_ps20l_msgs/Msg_DisplayState"); + // do { + // echoBack.subscribe(new TopicCallback(){ + // @Override + // public void handleMessage(Message message) { + // JSONObject jo = JSONObject.parseObject(message.toString()); + // debugInfoJson.put("Msg_Timestamp", jo.getJSONObject("header").getJSONObject("stamp").getString("secs")); + // debugInfoJson.put("AGV_ID", jo.getString("AGV_ID")); + // debugInfoJson.put("Sys_Mode", jo.getString("Sys_Mode")); + // debugInfoJson.put("VehicleCtrlExpThrottle", jo.getString("VehicleCtrlExpThrottle")); + // debugInfoJson.put("Warning_Code", jo.getString("Warning_Code")); + // debugInfoJson.put("Car_Global_rx", jo.getString("Car_Global_rx")); + // debugInfoJson.put("Car_Global_ry", jo.getString("Car_Global_ry")); + // debugInfoJson.put("Car_Global_Theta", jo.getString("Car_Global_Theta")); + // debugInfoJson.put("Lateral_Deviation_m", jo.getString("Lateral_Deviation_m")); + // debugInfoJson.put("Vertical_Deviation_deg", jo.getString("Vertical_Deviation_deg")); + // debugInfoJson.put("Out_Of_Path_Times", jo.getString("Out_Of_Path_Times")); + // debugInfoJson.put("PLC_Warning_Code", jo.getString("PLC_Warning_Code")); + // debugInfoJson.put("Min_Dist", jo.getString("Min_Dist")); + // debugInfoJson.put("Auto_In_Line_State", jo.getString("Auto_In_Line_State")); + // debugInfoJson.put("PathFollow_Enable", jo.getString("PathFollow_Enable")); + // debugInfoJson.put("StartNode", jo.getString("StartNode")); + // debugInfoJson.put("EndNode", jo.getString("EndNode")); + // debugInfoJson.put("RealAutoChargeState", jo.getString("RealAutoChargeState")); + // debugInfoJson.put("PWR_Percent", jo.getString("PWR_Percent")); + // debugInfoJson.put("SVreal_angle", jo.getString("SVreal_angle")); + // debugInfoJson.put("Speedm_Tmp", jo.getString("Speedm_Tmp")); + // debugInfoJson.put("VehicleCtrlRealAltitude_mm", jo.getString("VehicleCtrlRealAltitude_mm")); + // debugInfoJson.put("ReachState", jo.getString("ReachState")); + // debugInfoJson.put("ObstacleDetectState", jo.getString("ObstacleDetectState")); + // debugInfoJson.put("ObstacleTouchState", jo.getString("ObstacleTouchState")); + // debugInfoJson.put("PWR_Warn", jo.getString("PWR_Warn")); + // debugInfoJson.put("VehicleCtrl_CAN_Err_Info", jo.getString("VehicleCtrl_CAN_Err_Info")); + // debugInfoJson.put("Curtis_Warning_Code_Speed", jo.getString("Curtis_Warning_Code_Speed")); + // debugInfoJson.put("Curtis_Warning_Code_Steer", jo.getString("Curtis_Warning_Code_Steer")); + // debugInfoJson.put("VehicleCtrlRealCustomStateByte0", jo.getString("VehicleCtrlRealCustomStateByte0")); + // debugInfoJson.put("VehicleCtrlRealCustomStateByte1", jo.getString("VehicleCtrlRealCustomStateByte1")); + // debugInfoJson.put("VehicleCtrlRealCustomStateByte2", jo.getString("VehicleCtrlRealCustomStateByte2")); + // debugInfoJson.put("VehicleCtrlRealCustomStateByte3", jo.getString("VehicleCtrlRealCustomStateByte3")); + // debugInfoJson.put("LastAltitudeExpectValue_mm", jo.getString("LastAltitudeExpectValue_mm")); + // debugInfoJson.put("Get_Nav350_Curr_Layer", jo.getString("Get_Nav350_Curr_Layer")); + // debugInfoJson.put("Update_Sch", jo.getString("Update_Sch")); + // debugInfoJson.put("Update_State", jo.getString("Update_State")); + // debugInfoJson.put("Task_Sch", jo.getString("Task_Sch")); + // debugInfoJson.put("Task_State", jo.getString("Task_State")); + // debugInfoJson.put("PFC_Sch", jo.getString("PFC_Sch")); + // debugInfoJson.put("PFC_State", jo.getString("PFC_State")); + // debugInfoJson.put("License_Info", jo.getString("License_Info")); + // debugInfoJson.put("Env_CustomName", jo.getString("Env_CustomName")); + // debugInfoJson.put("Env_VehicleType", jo.getString("Env_VehicleType")); + // debugInfoJson.put("Env_SoftwareVersion", jo.getString("Env_SoftwareVersion")); + // String PathFollow_Enable = jo.getString("PathFollow_Enable"); + // if(StrUtil.equals("false", PathFollow_Enable)) { + // JSONObject taskjo = WQLObject.getWQLObject("ST_TASK_INFO").query("is_delete='0'and task_status='01'").uniqueResult(0); + // if(ObjectUtil.isNotEmpty(taskjo)) { + // taskjo.put("task_status", "02"); + // taskjo.put("task_status_name", "完成"); + // taskjo.put("update_time", DateUtil.now()); + // WQLObject.getWQLObject("ST_TASK_INFO").update(taskjo); + // } + // } + // debugInfoJson.put("PathFollow_Enable", PathFollow_Enable); + // echoBack.unsubscribe(); + // } + // }); + // } + // while(ObjectUtil.isEmpty(debugInfoJson)); + // } } diff --git a/nladmin-system/src/main/java/org/nl/agv/service/impl/TaskServiceServiceImpl.java b/nladmin-system/src/main/java/org/nl/agv/service/impl/TaskServiceServiceImpl.java index 54eb8b6..c6d2ce6 100644 --- a/nladmin-system/src/main/java/org/nl/agv/service/impl/TaskServiceServiceImpl.java +++ b/nladmin-system/src/main/java/org/nl/agv/service/impl/TaskServiceServiceImpl.java @@ -30,6 +30,7 @@ import edu.wpi.rail.jrosbridge.services.ServiceResponse; import jline.internal.Log; import lombok.RequiredArgsConstructor; import com.alibaba.fastjson.JSONObject; +import org.nl.agv.enu.TaskTypeEnum; import org.nl.agv.service.DevelopService; import org.nl.agv.service.TaskService; import org.nl.agv.unit.sendToAgvUtil; @@ -38,10 +39,16 @@ import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; + +import static org.nl.agv.service.impl.HomeServiceImpl.debugInfoJson; /** * @author zhanghouying @@ -49,178 +56,278 @@ import java.util.Map; */ @Service @RequiredArgsConstructor -public class TaskServiceServiceImpl implements TaskService{ - public static JSONObject pointJson = new JSONObject(); +@EnableScheduling +public class TaskServiceServiceImpl implements TaskService { + public static JSONObject pointJson = new JSONObject(); - @Override - public Map queryPoint(Map jsonObject) { - JSONObject jsonObject1 = new JSONObject(); - JSONObject returnjo = new JSONObject(); - try { - String rest_pointcode = ""; - ServiceResponse response = sendToAgvUtil.send("GetStationFloorIndexTable"); - String result_info = JSONObject.parseObject(response.toString()).getString("ROS_String_Output"); - String[] split = result_info.split("\\n"); - for(int i = 0; i < split.length; i++) { - String row = split[i]; - String[] rowArr = row.split("\\s+"); - pointJson.put(rowArr[3], rowArr[4].contains("<") ? "" : rowArr[4]); - } - JSONArray arr = new JSONArray(); - for(Object key : pointJson.keySet()) { - String value = (String) pointJson.get(key); - System.out.println("Key = " + key + ", Value = " + value); - JSONObject row = new JSONObject(); - row.put("point_code", key); - row.put("point_name", value); - row.put("code_name", key + "-" + value); - if(StrUtil.equals("休息", value)) { - rest_pointcode = (String) key; - } - arr.add(row); - } - jsonObject1.put("result_info", result_info); - returnjo.put("code", "1"); - returnjo.put("desc", "查询成功!"); - returnjo.put("rest_pointcode", rest_pointcode); - returnjo.put("result", arr); - } - catch(Exception ex) { - String sfd = ex.getMessage(); - } - return returnjo; - } + @Override + public Map queryPoint(Map jsonObject) { + JSONObject jsonObject1 = new JSONObject(); + JSONObject returnjo = new JSONObject(); + try { + String rest_pointcode = ""; + ServiceResponse response = sendToAgvUtil.send("GetStationFloorIndexTable"); + String result_info = JSONObject.parseObject(response.toString()).getString("ROS_String_Output"); + String[] split = result_info.split("\\n"); + for (int i = 0; i < split.length; i++) { + String row = split[i]; + String[] rowArr = row.split("\\s+"); + pointJson.put(rowArr[3], rowArr[4].contains("<") ? "" : rowArr[4]); + } + JSONArray arr = new JSONArray(); + for (Object key : pointJson.keySet()) { + String value = (String) pointJson.get(key); + System.out.println("Key = " + key + ", Value = " + value); + JSONObject row = new JSONObject(); + row.put("point_code", key); + row.put("point_name", value); + row.put("code_name", key + "-" + value); + if (StrUtil.equals("休息", value)) { + rest_pointcode = (String) key; + } + arr.add(row); + } + jsonObject1.put("result_info", result_info); + returnjo.put("code", "1"); + returnjo.put("desc", "查询成功!"); + returnjo.put("rest_pointcode", rest_pointcode); + returnjo.put("result", arr); + } catch (Exception ex) { + String error = ex.getMessage(); + } + return returnjo; + } - @Override - public Map confirmPoint(Map jsonObject) { - String point_code = (String) jsonObject.get("point_code"); - JSONObject returnjo = new JSONObject(); - if(StrUtil.isEmpty(point_code)) { - throw new BadRequestException("站点不能为空!"); - } - //查询未完成的指令有多少条 - int num = WQL.getWO("QAGVERROR").addParam("flag", "3").process().uniqueResult(0).getInteger("num"); - //查询最多的任务数量 - int max_task_num = WQLObject.getWQLObject("ST_SYSTEM_PARAM").query("1=1").uniqueResult(0).getInteger("max_task_num"); - if(num >= max_task_num) { - returnjo.put("code", "1"); - returnjo.put("desc", "未执行的任务数量达到上限!"); - return returnjo; - } - JSONObject taskjo = new JSONObject(); - int seq_num = 1; - String task_status = "00"; - String task_status_name = "生成未执行"; - //查询未完成最大的顺序号 - JSONObject taskrow = WQLObject.getWQLObject("ST_TASK_INFO").query("is_manualfinished=0", "seq_num desc").uniqueResult(0); - if(ObjectUtil.isNotEmpty(taskrow)) { - seq_num = taskrow.getInteger("seq_num") + 1; - } - if(ObjectUtil.isEmpty(taskrow)) { - //只有第一条下发给agv - String a = "HMIStepOrRTPathFollow:0;" + point_code + ";1#"; - ServiceResponse send = sendToAgvUtil.send(a); - JSONObject resjo = JSONObject.parseObject(send.toString()); - if(StrUtil.equals("0", resjo.getString("result"))) { - task_status_name = "执行中"; - task_status = "01"; - } - JSONObject change = sendToAgvUtil.change(point_code); - //sendToAgvUtil.sendtask(change.getString("first"), change.getString("last")); - } - taskjo.put("task_uuid", IdUtil.simpleUUID()); - taskjo.put("task_code", CodeUtil.getNewCode("TASK_NO")); - taskjo.put("task_status", task_status); - taskjo.put("task_status_name", task_status_name); - taskjo.put("next_point_code", point_code); - taskjo.put("task_type", "1"); - taskjo.put("is_delete", "0"); - taskjo.put("seq_num", seq_num); - taskjo.put("date", DateUtil.today()); - taskjo.put("create_time", DateUtil.now()); - taskjo.put("is_agvfinished", "0"); - taskjo.put("is_manualfinished", "0"); - taskjo.put("create_by", SecurityUtils.getCurrentNickName()); - WQLObject.getWQLObject("ST_TASK_INFO").insert(taskjo); - returnjo.put("code", "1"); - returnjo.put("desc", "新增成功!"); - return returnjo; - } + @Override + public Map confirmPoint(Map jsonObject) { + String pointCode = jsonObject.get("point_code"); + JSONObject returnjo = new JSONObject(); + if (StrUtil.isEmpty(pointCode)) { + throw new BadRequestException("站点不能为空!"); + } + //查询未完成的指令有多少条 + int num = WQL.getWO("QAGVERROR").addParam("flag", "3").process().uniqueResult(0).getInteger("num"); + //查询最多的任务数量 + int maxTaskNum = WQLObject.getWQLObject("ST_SYSTEM_PARAM").query("1=1").uniqueResult(0).getInteger("max_task_num"); + if (num >= maxTaskNum) { + returnjo.put("code", "1"); + returnjo.put("desc", "未执行的任务数量达到上限!"); + return returnjo; + } + JSONObject taskjo = new JSONObject(); + int seqNum = 1; + String task_status = "00"; + String task_status_name = "生成未执行"; + //查询未完成最大的顺序号 + JSONObject taskrow = WQLObject.getWQLObject("ST_TASK_INFO").query("is_manualfinished=0", "seq_num desc").uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskrow)) { + seqNum = taskrow.getInteger("seq_num") + 1; + } + if (ObjectUtil.isEmpty(taskrow)) { + //只有第一条下发给agv + String a = "HMIStepOrRTPathFollow:0;" + pointCode + ";1#"; + ServiceResponse send = sendToAgvUtil.send(a); + JSONObject resjo = JSONObject.parseObject(send.toString()); + if (StrUtil.equals("0", resjo.getString("result"))) { + task_status_name = "执行中"; + task_status = "01"; + } + JSONObject change = sendToAgvUtil.change(pointCode); + //sendToAgvUtil.sendtask(change.getString("first"), change.getString("last")); + } + taskjo.put("task_uuid", IdUtil.simpleUUID()); + taskjo.put("task_code", CodeUtil.getNewCode("TASK_NO")); + taskjo.put("task_status", task_status); + taskjo.put("task_status_name", task_status_name); + taskjo.put("next_point_code", pointCode); + taskjo.put("task_type", "1"); + taskjo.put("is_delete", "0"); + taskjo.put("seq_num", seqNum); + taskjo.put("date", DateUtil.today()); + taskjo.put("create_time", DateUtil.now()); + taskjo.put("is_agvfinished", "0"); + taskjo.put("is_manualfinished", "0"); + taskjo.put("create_by", SecurityUtils.getCurrentNickName()); + WQLObject.getWQLObject("ST_TASK_INFO").insert(taskjo); + returnjo.put("code", "1"); + returnjo.put("desc", "新增成功!"); + return returnjo; + } - @Override - public Map queryTaskList(Map jsonObject) { - JSONArray resultJSONArray = WQL.getWO("QAGVERROR").addParam("flag", "2").process().getResultJSONArray(0); - JSONObject returnjo = new JSONObject(); - returnjo.put("code", "1"); - returnjo.put("desc", "查询成功!"); - returnjo.put("result", resultJSONArray); - return returnjo; - } + @Override + public Map confirmPoint1(Map jsonObject) { + String point_code = jsonObject.get("point_code"); + String type = jsonObject.get("type"); + if (StrUtil.isEmpty(point_code) || StrUtil.isEmpty(type)) { + throw new BadRequestException("站点或操作类型不能为空!"); + } + String instruct = ""; + int seq_num = 1; + String task_status = "00"; + String task_status_name = "生成未执行"; + JSONObject returnjo = new JSONObject(); + //查询未完成的指令有多少条 + int num = WQL.getWO("QAGVERROR").addParam("flag", "3").process().uniqueResult(0).getInteger("num"); + //查询最多的任务数量 + int max_task_num = WQLObject.getWQLObject("ST_SYSTEM_PARAM").query("1=1").uniqueResult(0).getInteger("max_task_num"); + if (num >= max_task_num) { + returnjo.put("code", "1"); + returnjo.put("desc", "未执行的任务数量达到上限!"); + return returnjo; + } + //查询未完成最大的顺序号 + JSONObject taskrow = WQLObject.getWQLObject("ST_TASK_INFO").query("is_manualfinished=0", "seq_num desc").uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskrow)) { + seq_num = taskrow.getInteger("seq_num") + 1; + } + JSONObject taskjo = new JSONObject(); + taskjo.put("task_type", type.equals(TaskTypeEnum.RETURN.getCode()) ? TaskTypeEnum.COMMON.getCode() : type); + taskjo.put("seq_num", type.equals(TaskTypeEnum.RETURN.getCode()) ? getSeqNum() : seq_num); + taskjo.put("task_uuid", IdUtil.simpleUUID()); + taskjo.put("task_code", CodeUtil.getNewCode("TASK_NO")); + taskjo.put("next_point_code", point_code); + taskjo.put("is_delete", "0"); + taskjo.put("date", DateUtil.today()); + taskjo.put("create_time", DateUtil.now()); + taskjo.put("is_agvfinished", "0"); + taskjo.put("is_manualfinished", "0"); + taskjo.put("create_by", SecurityUtils.getCurrentNickName()); + //只有一条且是第一条下发给agv + if (ObjectUtil.isEmpty(taskrow)) { + if (type.equals(TaskTypeEnum.COMMON.getCode())) { + instruct = "HMIStepOrRTPathFollow:0;" + point_code + ";1#"; + } else if (type.equals(TaskTypeEnum.TAKE.getCode()) || type.equals(TaskTypeEnum.PUT.getCode())) { + instruct = "HMIStepOrRTPathFollow:0;" + point_code + ";1#"; + //获取返程点 + //ServiceResponse send = sendToAgvUtil.send("HMIRouter:" + debugInfoJson.getString("CurNodeID") + ";" + point_code + ";#"); + // JSONObject resjo = JSONObject.parseObject(send.toString()); + //todo 需要改回,检查返回的路由信息resjo + String v2 = "HMIRouter:0;2;#\nExport_NodeIDPath:\n1 2 \nExport_NodeIDPath_End"; + String pointCode2 = v2.substring(v2.indexOf("Export_NodeIDPath:\n") + "Export_NodeIDPath:\n".length(), v2.indexOf(" \nExport_NodeIDPath_End")); + taskjo.put("next_point_code2", pointCode2); + } else if (type.equals(TaskTypeEnum.RETURN.getCode())) { + instruct = "HMIStepOrRTPathFollow:0;" + point_code + ";1#"; + taskjo.put("task_type", TaskTypeEnum.COMMON.getCode()); + } + //ServiceResponse send = sendToAgvUtil.send(instruct); + //JSONObject resjo = JSONObject.parseObject(send.toString()); + // + // if (StrUtil.equals("0", resjo.getString("result"))) { + // task_status_name = "执行中"; + // task_status = "01"; + // } + if (true) { + task_status_name = "执行中"; + task_status = "01"; + } + //JSONObject change = sendToAgvUtil.change(point_code); + //sendToAgvUtil.sendtask(change.getString("first"), change.getString("last")); + } + taskjo.put("task_status", task_status); + taskjo.put("task_status_name", task_status_name); + WQLObject.getWQLObject("ST_TASK_INFO").insert(taskjo); + returnjo.put("code", "1"); + returnjo.put("desc", "新增成功!"); + return returnjo; + } - @Override - public Map deleteTask(Map jsonObject) { - String task_num = (String) jsonObject.get("task_num"); - if(StrUtil.isEmpty(task_num)) { - throw new BadRequestException("任务号不能为空"); - } - WQLObject taskTable = WQLObject.getWQLObject("ST_TASK_INFO"); - JSONObject taskjo = taskTable.query("task_code='" + task_num + "'").uniqueResult(0); - taskjo.put("is_delete", "1"); - taskjo.put("update_by", SecurityUtils.getCurrentNickName()); - taskTable.update(taskjo); - JSONObject returnjo = new JSONObject(); - returnjo.put("code", "1"); - returnjo.put("desc", "删除成功!"); - return returnjo; - } + private static Integer getSeqNum() { + WQLObject taskTable = WQLObject.getWQLObject("ST_TASK_INFO"); + JSONArray taskrows = taskTable.query("task_status='00' or task_status='01'").getResultJSONArray(0); + //存在多条未完成任务,则重新排序,返程任务最优先 + if (taskrows.size() > 0) { + //获取序号最小值 + int minSeqNum = taskrows.stream().mapToInt(o -> ((JSONObject) o).getIntValue("seq_num")).min().orElse(0); + //更新现有数据的序号 + taskrows.forEach(taskObj -> ((JSONObject) taskObj).put("seq_num", ((JSONObject) taskObj).getIntValue("seq_num") + 1)); + //返程任务顺序号为最小 + int seq_num = minSeqNum; + //taskrows.add(0, taskjo); //插入到最前面 + for (int i = 0; i < taskrows.size(); i++) { + JSONObject task = taskrows.getJSONObject(i); + taskTable.update(task); + } + return seq_num; + } + return 1; + } + + + @Override + public Map queryTaskList(Map jsonObject) { + JSONArray resultJSONArray = WQL.getWO("QAGVERROR").addParam("flag", "2").process().getResultJSONArray(0); + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "查询成功!"); + returnjo.put("result", resultJSONArray); + return returnjo; + } + + @Override + public Map deleteTask(Map jsonObject) { + String task_num = (String) jsonObject.get("task_num"); + if (StrUtil.isEmpty(task_num)) { + throw new BadRequestException("任务号不能为空"); + } + WQLObject taskTable = WQLObject.getWQLObject("ST_TASK_INFO"); + JSONObject taskjo = taskTable.query("task_code='" + task_num + "'").uniqueResult(0); + taskjo.put("is_delete", "1"); + taskjo.put("update_by", SecurityUtils.getCurrentNickName()); + taskTable.update(taskjo); + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "删除成功!"); + return returnjo; + } + + @Override + public Map updateTask(Map jsonObject) { + JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(jsonObject.get("param"))); + WQLObject taskTable = WQLObject.getWQLObject("ST_TASK_INFO"); + //更新之前删除之前的所有未完成任务 + JSONArray taskrows = taskTable.query("task_status='00' or task_status='01'").getResultJSONArray(0); + for (int i = 0; i < taskrows.size(); i++) { + JSONObject taskrow = taskrows.getJSONObject(i); + taskrow.put("is_delete", "1"); + taskTable.update(taskrow); + } + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject taskjo = jsonArray.getJSONObject(i); + String taskNum = taskjo.getString("task_code"); + JSONObject taskrow = taskTable.query("task_code='" + taskNum + "'").uniqueResult(0); + taskrow.put("seq_num", i + 1); + taskrow.put("is_delete", "0"); + taskrow.put("update_by", SecurityUtils.getCurrentNickName()); + taskTable.update(taskrow); + } + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "更新成功!"); + return returnjo; + } + + @Override + public Map check(Map jsonObject) { + String password = (String) jsonObject.get("password"); + if (StrUtil.isEmpty(password)) { + throw new BadRequestException("密码不能空!"); + } + //1代表正确,2 代表不正确 + String is_correct; + JSONObject paramjo = WQLObject.getWQLObject("ST_SYSTEM_PARAM").query("1=1").uniqueResult(0); + String super_password = paramjo.getString("super_password"); + String passworddb = paramjo.getString("password"); + JSONObject returnjo = new JSONObject(); + if (StrUtil.equals(password, super_password) || StrUtil.equals(passworddb, password)) { + is_correct = "1"; + returnjo.put("code", "1"); + returnjo.put("desc", "密码校验成功!"); + } else { + returnjo.put("code", "0"); + returnjo.put("desc", "密码不正确!"); + } + return returnjo; + } - @Override - public Map updateTask(Map jsonObject) { - JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(jsonObject.get("param"))); - WQLObject taskTable = WQLObject.getWQLObject("ST_TASK_INFO"); - //更新之前删除之前的所有未完成任务 - JSONArray taskrows = taskTable.query("task_status='00' or task_status='01'").getResultJSONArray(0); - for(int i = 0; i < taskrows.size(); i++) { - JSONObject taskrow = taskrows.getJSONObject(i); - taskrow.put("is_delete", "1"); - taskTable.update(taskrow); - } - for(int i = 0; i < jsonArray.size(); i++) { - JSONObject taskjo = jsonArray.getJSONObject(i); - String taskNum = taskjo.getString("task_code"); - JSONObject taskrow = taskTable.query("task_code='" + taskNum + "'").uniqueResult(0); - taskrow.put("seq_num", i + 1); - taskrow.put("is_delete", "0"); - taskrow.put("update_by", SecurityUtils.getCurrentNickName()); - taskTable.update(taskrow); - } - JSONObject returnjo = new JSONObject(); - returnjo.put("code", "1"); - returnjo.put("desc", "更新成功!"); - return returnjo; - } - @Override - public Map check(Map jsonObject) { - String password = (String) jsonObject.get("password"); - if(StrUtil.isEmpty(password)) { - throw new BadRequestException("密码不能空!"); - } - //1代表正确,2 代表不正确 - String is_correct; - JSONObject paramjo = WQLObject.getWQLObject("ST_SYSTEM_PARAM").query("1=1").uniqueResult(0); - String super_password = paramjo.getString("super_password"); - String passworddb = paramjo.getString("password"); - JSONObject returnjo = new JSONObject(); - if(StrUtil.equals(password, super_password) || StrUtil.equals(passworddb, password)) { - is_correct = "1"; - returnjo.put("code", "1"); - returnjo.put("desc", "密码校验成功!"); - } - else{ - returnjo.put("code", "0"); - returnjo.put("desc", "密码不正确!"); - } - return returnjo; - } } \ No newline at end of file diff --git a/nladmin-system/src/main/java/org/nl/agv/wql/agv.xls b/nladmin-system/src/main/java/org/nl/agv/wql/agv.xls index 58b49e0..3aacd1c 100644 Binary files a/nladmin-system/src/main/java/org/nl/agv/wql/agv.xls and b/nladmin-system/src/main/java/org/nl/agv/wql/agv.xls differ diff --git a/nladmin-system/src/main/resources/config/application-dev.yml b/nladmin-system/src/main/resources/config/application-dev.yml index 8756a6c..edd35fd 100644 --- a/nladmin-system/src/main/resources/config/application-dev.yml +++ b/nladmin-system/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 8018 + port: 8019 ##配置数据源 spring: datasource: diff --git a/nladmin-system/src/main/resources/config/application-prod1.yml b/nladmin-system/src/main/resources/config/application-prod1.yml new file mode 100644 index 0000000..00cd60d --- /dev/null +++ b/nladmin-system/src/main/resources/config/application-prod1.yml @@ -0,0 +1,185 @@ +server: + port: 8018 +#配置数据源 +spring: + datasource: + druid: + db-type: com.alibaba.druid.pool.DruidDataSource + driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + #192.168.137.41 + url: jdbc:g4lojdbc:mysql://${DB_HOST:192.168.137.41}:${DB_PORT:3306}/${DB_NAME:nl_agv}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false + #url: jdbc:log4jdbc:mysql://${DB_HOST:43.139.166.161}:${DB_PORT:3310}/${DB_NAME:nl_agv}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false + #url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false + username: ${DB_USER:generallu} + #password: ${DB_PWD:P@ssw0rd} + password: ${DB_PWD:123456} + #password: ${DB_PWD:Root.123456} + # 初始连接数 + initial-size: 15 + # 最小连接数 + min-idle: 45 + # 最大连接数 + max-active: 90 + # 是否自动回收超时连接 + remove-abandoned: true + # 超时时间(以秒数为单位) + remove-abandoned-timeout: 180 + # 获取连接超时时间 + max-wait: 3000 + # 连接有效性检测时间 + time-between-eviction-runs-millis: 60000 + # 连接在池中最小生存的时间 + min-evictable-idle-time-millis: 300000 + # 连接在池中最大生存的时间 + max-evictable-idle-time-millis: 900000 + # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除 + test-while-idle: true + # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个 + test-on-borrow: true + # 是否在归还到池中前进行检验 + test-on-return: false + # 检测连接是否有效 + validation-query: select 1 + # 配置监控统计 + webStatFilter: + enabled: true + stat-view-servlet: + enabled: true + url-pattern: /druid/* + reset-enable: false + filters: + DruidFilter,stat + redis: + #数据库索引 + database: ${REDIS_DB:6} + host: ${REDIS_HOST:127.0.0.1} + #host: ${REDIS_HOST:localhost} + port: ${REDIS_PORT:6379} + password: ${REDIS_PWD:} + #连接超时时间 + timeout: 5000 + redisson: + config: | + threads: 4 + nettyThreads: 4 + singleServerConfig: + connectionMinimumIdleSize: 8 + connectionPoolSize: 8 + address: redis://127.0.0.1:6379 + idleConnectionTimeout: 10000 + timeout: 3000 +# 登录相关配置 +login: + # 登录缓存 + cache-enable: true + # 是否限制单用户登录 + single-login: false + # 验证码 + login-code: + # 验证码类型配置 查看 LoginProperties 类 + code-type: arithmetic + # 登录图形验证码有效时间/分钟 + expiration: 2 + # 验证码高度 + width: 111 + # 验证码宽度 + heigth: 36 + # 内容长度 + length: 2 + # 字体名称,为空则使用默认字体 + font-name: + # 字体大小 + font-size: 25 + +#jwt +jwt: + header: Authorization + # 令牌前缀 + token-start-with: Bearer + # 必须使用最少88位的Base64对该令牌进行编码 + base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI= + # 令牌过期时间 此处单位/毫秒 ,默认4小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html + token-validity-in-seconds: 14400000 + # 在线用户key + online-key: online-token- + # 验证码 + code-key: code-key- + # token 续期检查时间范围(默认30分钟,单位毫秒),在token即将过期的一段时间内用户操作了,则给用户的token续期 + detect: 1800000 + # 续期时间范围,默认1小时,单位毫秒 + renew: 3600000 + +#是否允许生成代码,生产环境设置为false +generator: + enabled: true + +#是否开启 swagger-ui +swagger: + enabled: true + +# IP 本地解析 +ip: + local-parsing: true + +# 文件存储路径 +file: + mac: + path: ~/file/ + avatar: ~/avatar/ + linux: + path: /home/eladmin/file/ + avatar: /home/eladmin/avatar/ + windows: + path: C:\eladmin\file\ + avatar: C:\eladmin\avatar\ + # 文件大小 /M + maxSize: 100 + avatarMaxSize: 5 + +sa-token: + # token 名称 (同时也是cookie名称) + token-name: Authorization + # token 有效期,单位s 默认30天, -1代表永不过期 + timeout: 2592000 + # token 临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 + activity-timeout: -1 + # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) + is-concurrent: true + # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) + is-share: false + # token风格 + token-style: random-128 + # 是否输出操作日志 + is-log: false + jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq + # token 前缀 + token-prefix: + cookie: + # 配置 Cookie 作用域:根据二级域名实现sso登入如lms.sso.com;acs.sso.com + domain: + +jetcache: + defaultCacheType: LOCAL + statIntervalMinutes: 15 + areaInCacheName: false + hiddenPackages: com.yb + local: + default: + type: caffeine + limit: 100 + keyConvertor: fastjson + expireAfterWriteInMillis: 60000 + remote: + default: + type: redis.lettuce + keyConvertor: fastjson + valueEncoder: kryo + valueDecoder: kryo + poolConfig: + minIdle: 5 + maxIdle: 200 + maxTotal: 1000 + uri: + - redis://127.0.0.1:6379 +es: + index: mes_log diff --git a/nladmin-system/src/main/resources/config/application.yml b/nladmin-system/src/main/resources/config/application.yml index 452a014..a97c11f 100644 --- a/nladmin-system/src/main/resources/config/application.yml +++ b/nladmin-system/src/main/resources/config/application.yml @@ -2,7 +2,7 @@ spring: freemarker: check-template-location: false profiles: - active: prod + active: dev jackson: time-zone: GMT+8 data: