add:增补需求

This commit is contained in:
2025-08-19 16:16:15 +08:00
parent c4b382a189
commit b3a6b14d91
12 changed files with 230 additions and 34 deletions

View File

@@ -100,5 +100,12 @@ public class AgvController {
return new ResponseEntity<>(agvService.queryDeviceStation(), HttpStatus.OK);
}
@PostMapping("/magic/agvack/{device}")
@Log("AGV请求进入")
//@PreAuthorize("@el.check('routePlan:list')")
public ResponseEntity<Object> requestIn(@PathVariable String device) {
return new ResponseEntity<>(agvService.requestIn(device), HttpStatus.OK);
}
}

View File

@@ -182,4 +182,6 @@ public interface AgvService {
String queryDeviceStation();
String requestIn(String device);
}

View File

@@ -1169,16 +1169,16 @@ public class AgvServiceImpl implements AgvService {
Device device = deviceAppService.findDeviceByCode(deviceCode);
if (ObjectUtil.isEmpty(device)) {
logServer.log("","agvInArea","","设备:" + deviceCode + ",动作:" + param,"设备:" + deviceCode + "未找到对应设备","400","","",now);
logServer.log("", "agvInArea", "", "设备:" + deviceCode + ",动作:" + param, "设备:" + deviceCode + "未找到对应设备", "400", "", "", now);
throw new BadRequestException("未找到对应设备");
}
if (device.getDeviceDriver() instanceof LampThreecolorDeviceDriver) {
lampThreecolorDeviceDriver = (LampThreecolorDeviceDriver) device.getDeviceDriver();
if (StrUtil.equals("open", param)) {
if (lampThreecolorDeviceDriver.getAction() == 1) {
logServer.log("","agvInArea","","设备:" + deviceCode + ",动作:" + param,"设备:" + deviceCode + "有人进入agv不允许进入","400","","",now);
logServer.log("", "agvInArea", "", "设备:" + deviceCode + ",动作:" + param, "设备:" + deviceCode + "有人进入agv不允许进入", "400", "", "", now);
throw new RuntimeException("有人进入agv不允许进入");
} else if (lampThreecolorDeviceDriver.getAction() == 2){
} else if (lampThreecolorDeviceDriver.getAction() == 2) {
lampThreecolorDeviceDriver.OpenOrClose("1");
}
} else if (StrUtil.equals("close", param)) {
@@ -1189,7 +1189,7 @@ public class AgvServiceImpl implements AgvService {
resultJson.put("status", HttpStatus.OK);
resultJson.put("message", "操作成功");
resultJson.put("data", new JSONObject());
logServer.log("","agvInArea","","设备:" + deviceCode + ",动作:" + param,resultJson.toString(),"200","","",now);
logServer.log("", "agvInArea", "", "设备:" + deviceCode + ",动作:" + param, resultJson.toString(), "200", "", "", now);
return null;
}
@@ -1701,6 +1701,36 @@ public class AgvServiceImpl implements AgvService {
return null;
}
@Override
public String requestIn(String device) {
log.info("AGV请求进入参数:{}", device);
boolean flag = false;
device = device.substring(0, device.length() - 4);
DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class);
Device addressdevice = appService.findDeviceByCode(device);
LampThreecolorDeviceDriver lampThreecolorDeviceDriver;
if (addressdevice.getDeviceDriver() instanceof LampThreecolorDeviceDriver) {
lampThreecolorDeviceDriver = (LampThreecolorDeviceDriver) addressdevice.getDeviceDriver();
if (lampThreecolorDeviceDriver.getAction() == 1) {
log.info("AGV请求进入反馈失败,当前的设备" + device + "的action信号值是{}", lampThreecolorDeviceDriver.getAction());
flag = false;
}
if (lampThreecolorDeviceDriver.getAction() == 2) {
log.info("AGV请求进入反馈成功,当前的设备" + device + "的action信号值是{}", lampThreecolorDeviceDriver.getAction());
flag = true;
}
if (lampThreecolorDeviceDriver.getAction() == 0){
flag = false;
log.info("AGV请求进入反馈失败,当前的设备" + device + "的action信号值是{}", lampThreecolorDeviceDriver.getAction());
}
}
if (flag) {
return "OK";
} else {
throw new RuntimeException("AGV请求进入反馈失败 " + device);
}
}
String hexToString(int i) {
return (i < 16 ? "0" + Integer.toHexString(i) : Integer.toHexString(i)).toUpperCase();
}

View File

@@ -1,7 +1,11 @@
package org.nl.acs.device_driver;
import cn.hutool.core.util.StrUtil;
import org.nl.acs.opc.Device;
import java.util.ArrayList;
import java.util.List;
public interface DeviceDriver {
default String getDeviceCode() {
return this.getDevice().getDevice_code();

View File

@@ -1,5 +1,6 @@
package org.nl.acs.device_driver.lamp_three_color;
import cn.hutool.core.util.StrUtil;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -7,20 +8,23 @@ import net.sf.json.JSONObject;
import org.nl.acs.agv.server.AgvService;
import org.nl.acs.device.device_driver.standard_inspect.ReadUtil;
import org.nl.acs.device.service.DeviceService;
import org.nl.acs.device.service.dto.DeviceDto;
import org.nl.acs.device_driver.DeviceDriver;
import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver;
import org.nl.acs.device_driver.driver.ExecutableDeviceDriver;
import org.nl.acs.device_driver.electric_fence.ElectricFenceDeviceDriver;
import org.nl.acs.instruction.service.InstructionService;
import org.nl.acs.opc.Device;
import org.nl.acs.opc.DeviceAppService;
import org.nl.acs.opc.DeviceAppServiceImpl;
import org.nl.acs.route.service.RouteLineService;
import org.nl.acs.task.service.TaskService;
import org.nl.utils.SpringContextHolder;
import org.openscada.opc.lib.da.Server;
import org.springframework.beans.factory.annotation.Autowired;
import oshi.driver.mac.net.NetStat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
/**
* 检测站点驱动
@@ -106,10 +110,36 @@ public class LampThreecolorDeviceDriver extends AbstractOpcDeviceDriver implemen
}
if (action != last_action) {
if (action == 1) {
agvService.pause();
if ("2017".equals(device_code)){
List<String> link_device_codes = this.getExtraDeviceCodes("link_device_code");
String link_device_code = link_device_codes.get(0);
DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class);
Device link_device = appService.findDeviceByCode(link_device_code);
if (link_device.getDeviceDriver() instanceof ElectricFenceDeviceDriver) {
DeviceDto dto = deviceservice.findByCode(link_device_code);
if ("1".equals(dto.getManufacturer())) {
agvService.pause();
}
}
}else {
agvService.pause();
}
}
if (action == 2) {
agvService.resume();
if ("2017".equals(device_code)){
List<String> link_device_codes = this.getExtraDeviceCodes("link_device_code");
String link_device_code = link_device_codes.get(0);
DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class);
Device link_device = appService.findDeviceByCode(link_device_code);
if (link_device.getDeviceDriver() instanceof ElectricFenceDeviceDriver) {
DeviceDto dto = deviceservice.findByCode(link_device_code);
if ("1".equals(dto.getManufacturer())) {
agvService.resume();
}
}
}else {
agvService.resume();
}
}
this.execute_log.log("设备:" + device_code + ",last_action -> action:" + last_action + "->" + action);
}
@@ -127,6 +157,32 @@ public class LampThreecolorDeviceDriver extends AbstractOpcDeviceDriver implemen
}
public List<String> getExtraDeviceCodes(String extraName) {
Object extraValueObj = this.getDevice().getExtraValue().get(extraName);
String extraValue ;
if (extraValueObj instanceof String) {
extraValue = (String) extraValueObj;
} else if (extraValueObj instanceof Object[]) {
// 处理 Object 数组的情况
Object[] array = (Object[]) extraValueObj;
extraValue = Arrays.toString(array); // 或者其他你需要的处理方式
} else {
// 其他情况,默认转为字符串
extraValue = extraValueObj != null ? extraValueObj.toString() : "";
}
if (StrUtil.isEmpty(extraValue)) {
return new ArrayList<>();
}
String devicesString = extraValue.substring(1, extraValue.length() - 1);
List<String> devicesList = new ArrayList<>();
String[] devices = devicesString.split(",");
for (int i = 0; i < devices.length; i++) {
String s = devices[i].replace("\"", "").replace("\"", "");
devicesList.add(s);
}
return devicesList;
}
public synchronized String getStatus() {
JSONObject jo = new JSONObject();

View File

@@ -12,7 +12,9 @@ import org.nl.acs.config.server.AcsConfigService;
import org.nl.acs.device.address.service.AddressService;
import org.nl.acs.device.address.service.dto.AddressDto;
import org.nl.acs.device.service.DeviceService;
import org.nl.acs.device.service.dto.DeviceDto;
import org.nl.acs.device_driver.electric_fence.ElectricFenceDeviceDriver;
import org.nl.acs.device_driver.lamp_three_color.LampThreecolorDeviceDriver;
import org.nl.acs.device_driver.machines_site.MachinesSiteDeviceDriver;
import org.nl.acs.device_driver.non_line_inspect_site.NonLineInspectSiteDeviceDriver;
import org.nl.acs.device_driver.non_line_manipulator_inspect_site.NonLineManipulatorInspectSiteDeviceDriver;
@@ -44,11 +46,13 @@ import org.nl.acs.route.service.dto.RouteLineDto;
import org.nl.acs.task.service.TaskService;
import org.nl.acs.task.service.dto.TaskDto;
import org.nl.exception.WDKException;
import org.nl.utils.SecurityUtils;
import org.nl.utils.SpringContextHolder;
import org.nl.wql.core.bean.WQLObject;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -61,6 +65,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
private final TaskService TaskService;
private final DeviceService DeviceService;
private final DeviceAppService DeviceAppService;
private final DeviceService deviceService;
private final RouteLineService RouteLineService;
private final LogServer logServer;
private final AcsConfigService acsConfigService;
@@ -263,6 +268,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
@Override
public Map<String, Object> areaControl(JSONObject form) {
String now = DateUtil.now();
String currentUsername = SecurityUtils.getCurrentUsername();
String device_code = form.optString("device_code");
String type = form.optString("type");
log.info("areaControl--------------:输入参数" + form);
@@ -272,21 +278,69 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
logServer.log("","areaControl","error",form.toString(),"找不到该设备!","400","","",now);
throw new RuntimeException("找不到该设备!");
}
ElectricFenceDeviceDriver electricFenceDeviceDriver;
if (device.getDeviceDriver() instanceof ElectricFenceDeviceDriver) {
electricFenceDeviceDriver = (ElectricFenceDeviceDriver) device.getDeviceDriver();
if (StrUtil.equals(type,"1")) {
if (electricFenceDeviceDriver.getSuspended()) {
logServer.log("","areaControl","error",form.toString(),"交通管制无法进入!","400","","",now);
throw new RuntimeException("交通管制无法进入");
LampThreecolorDeviceDriver lampThreecolorDeviceDriver;
if ("J3".equals(device_code)){
if (device.getDeviceDriver() instanceof ElectricFenceDeviceDriver) {
if (ObjectUtil.isNotEmpty(device.getExtraValue().get("link_three_lamp"))) {
String link_device_code = device.getExtraValue().get("link_three_lamp").toString();
Device link_device = DeviceAppService.findDeviceByCode(link_device_code);
if (link_device.getDeviceDriver() instanceof LampThreecolorDeviceDriver) {
lampThreecolorDeviceDriver = (LampThreecolorDeviceDriver) link_device.getDeviceDriver();
if (StrUtil.equals(type, "1")) {
if (lampThreecolorDeviceDriver.getAction()==2) {
log.info("areaControl--------------:允许请求进入"+device_code+",当前"+link_device_code+"action值为:" + lampThreecolorDeviceDriver.getAction());
DeviceDto dto = deviceService.findByCode(device_code);
dto.setManufacturer("1");
dto.setUpdate_time(now);
dto.setUpdate_by(currentUsername);
WQLObject wo = WQLObject.getWQLObject("acs_device");
JSONObject json = JSONObject.fromObject(dto);
wo.update(json);
} else {
logServer.log("", "areaControl", "error", form.toString(), "插梢无法进入!", "400", "", "", now);
log.info("areaControl--------------:不允许请求进入" + device_code +",当前"+link_device_code + "插捎action值应该为2,当前为:" + lampThreecolorDeviceDriver.getAction());
throw new RuntimeException("交通管制无法进入");
}
} else if (StrUtil.equals(type, "2")) {
if (lampThreecolorDeviceDriver.getAction()==2) {
log.info("areaControl--------------:允许请求离开"+device_code+",当前"+link_device_code+"action值为:" + lampThreecolorDeviceDriver.getAction());
DeviceDto dto = deviceService.findByCode(device_code);
dto.setManufacturer("0");
dto.setUpdate_time(now);
dto.setUpdate_by(currentUsername);
WQLObject wo = WQLObject.getWQLObject("acs_device");
JSONObject json = JSONObject.fromObject(dto);
wo.update(json);
}else {
logServer.log("", "areaControl", "error", form.toString(), "插梢无法进入!", "400", "", "", now);
log.info("areaControl--------------:不允许请求离开" + device_code +",当前"+link_device_code + "插捎action值应该为2,当前为:" + lampThreecolorDeviceDriver.getAction());
throw new RuntimeException("交通管制无法进入");
}
}
}
}
electricFenceDeviceDriver.setSuspended(true);
} else if (StrUtil.equals(type,"2")) {
electricFenceDeviceDriver.setSuspended(false);
} else {
logServer.log("", "areaControl", "error", form.toString(), "该设备不是管制区域设备!", "400", "", "", now);
throw new RuntimeException("该设备不是管制区域设备");
}
} else {
logServer.log("","areaControl","error",form.toString(),"该设备不是管制区域设备!","400","","",now);
throw new RuntimeException("该设备不是管制区域设备");
if (device.getDeviceDriver() instanceof ElectricFenceDeviceDriver) {
electricFenceDeviceDriver = (ElectricFenceDeviceDriver) device.getDeviceDriver();
if (StrUtil.equals(type, "1")) {
if (electricFenceDeviceDriver.getSuspended()) {
logServer.log("", "areaControl", "error", form.toString(), "交通管制无法进入!", "400", "", "", now);
throw new RuntimeException("交通管制无法进入");
}
electricFenceDeviceDriver.setSuspended(true);
} else if (StrUtil.equals(type, "2")) {
electricFenceDeviceDriver.setSuspended(false);
}
} else {
logServer.log("", "areaControl", "error", form.toString(), "该设备不是管制区域设备!", "400", "", "", now);
throw new RuntimeException("该设备不是管制区域设备");
}
}
JSONObject resultJson = new JSONObject();

View File

@@ -6,6 +6,8 @@ import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.nl.acs.agv.server.AgvService;
import org.nl.acs.device_driver.feedback_agv_status_site.FeedbackAGVStatusSiteDeviceDriver;
import org.nl.acs.device_driver.lamp_three_color.LampThreecolorDeviceDriver;
import org.nl.acs.device_driver.magic_agv.MagicAgvDeviceDriver;
import org.nl.acs.instruction.service.InstructionService;
import org.nl.acs.opc.Device;
import org.nl.acs.opc.DeviceAppService;
@@ -36,18 +38,27 @@ public class QueryMagicAgvDeviceStatus {
JSONObject jo = ja.getJSONObject(i);
String device_code = jo.optString("name");
FeedbackAGVStatusSiteDeviceDriver feedbackAGVStatusSiteDeviceDriver;
LampThreecolorDeviceDriver lampThreecolorDeviceDriver;
DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class);
Device device = appService.findDeviceByCode(device_code);
if (device.getDeviceDriver() instanceof FeedbackAGVStatusSiteDeviceDriver) {
feedbackAGVStatusSiteDeviceDriver = (FeedbackAGVStatusSiteDeviceDriver) device.getDeviceDriver();
if (jo.optString("state").equals("UNKNOWN") || jo.optString("state").equals("UNAVAILABLE") || jo.optString("state").equals("ERROR")) {
feedbackAGVStatusSiteDeviceDriver.writing(4);
if (jo.optInt("warningCode") != 0) {
Device code = appService.findDeviceByCode("2016");
if (code.getDeviceDriver() instanceof LampThreecolorDeviceDriver) {
lampThreecolorDeviceDriver = (LampThreecolorDeviceDriver) code.getDeviceDriver();
if (lampThreecolorDeviceDriver.getAction() != 1) {
lampThreecolorDeviceDriver.writing(1);
}
}
}
if (jo.optString("state").equals("IDLE") || jo.optString("state").equals("CHARGING")) {
feedbackAGVStatusSiteDeviceDriver.writing(2);
}
if (jo.optString("state").equals("EXECUTING")) {
feedbackAGVStatusSiteDeviceDriver.writing(3);
if (jo.optInt("warningCode") == 0) {
Device code = appService.findDeviceByCode("2016");
if (code.getDeviceDriver() instanceof LampThreecolorDeviceDriver) {
lampThreecolorDeviceDriver = (LampThreecolorDeviceDriver) code.getDeviceDriver();
if (lampThreecolorDeviceDriver.getAction() == 1) {
lampThreecolorDeviceDriver.writing(2);
}
}
}
}
}

View File

@@ -254,6 +254,7 @@ public class PadServiceImpl implements PadService {
String material_type = jsonObject.get("material_type");
String carrier = jsonObject.get("carrier");
String task_type = jsonObject.get("task_type");
// String priority = jsonObject.get("priority");
RouteLineService routeLineService = SpringContextHolder.getBean(RouteLineServiceImpl.class);
JSONObject resultJson = new JSONObject();
@@ -287,6 +288,7 @@ public class PadServiceImpl implements PadService {
dto.setStart_point_code(start_devicecode);
dto.setNext_point_code(next_devicecode);
dto.setVehicle_code(carrier);
// dto.setPriority(priority);
try {
taskService.create(dto);
} catch (Exception e) {

View File

@@ -8,11 +8,11 @@ spring:
druid:
db-type: com.alibaba.druid.pool.DruidDataSource
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:zd_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:zd_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
#url: jdbc:log4jdbc:mysql://${DB_HOST:47.97.157.227}:${DB_PORT:3306}/${DB_NAME:jm_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
username: ${DB_USER:root}
#password: ${DB_PWD:P@ssw0rd}
password: ${DB_PWD:Root.123456}
password: ${DB_PWD:123456}
# 初始连接数
initial-size: 5
# 最小连接数
@@ -59,7 +59,7 @@ spring:
redis:
#数据库索引
database: ${REDIS_DB:1}
host: ${REDIS_HOST:47.97.157.227}
host: ${REDIS_HOST:127.0.0.1}
port: ${REDIS_PORT:6379}
password: ${REDIS_PWD:}
#连接超时时间

View File

@@ -2,7 +2,7 @@ spring:
freemarker:
check-template-location: false
profiles:
active: dev
active: prod
jackson:
time-zone: GMT+8
data:
@@ -43,7 +43,7 @@ rsa:
private_key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A==
logging:
file:
path: C:\logs\nlacs\
path: E:\logs\nlacs\
acsTowms:
token: Bearer eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiJiZTVmOGZiZDcyMWU0NGFiODRlOGI4NTE4ODE5OWM0ZiIsImF1dGgiOiJ1c2VyOmxpc3QsbW9uaXRvcjpsaXN0Iiwic3ViIjoiYWNzIn0.JGga-TcIHTt76KT_m_7bt-fxdBUdwdRfRjXzwLyPLVLLPoOSXbVPbf2q6vcV-fh33r2wyrBEleWYVPOEvjrZMw

View File

@@ -64,7 +64,7 @@ https://juejin.cn/post/6844903775631572999
<!--生产环境:打印控制台和输出到文件-->
<springProfile name="prod">
<root level="off">
<root level="INFO">
<!-- <appender-ref ref="CONSOLE"/>-->
<appender-ref ref="asyncFileAppender"/>
<appender-ref ref="FILE4"/>
@@ -96,6 +96,9 @@ https://juejin.cn/post/6844903775631572999
<logger name="jdbc.sqltiming" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="org.nl.wql" level="info" additivity="true">
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="org.jinterop" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>

View File

@@ -42,6 +42,33 @@
</el-row>
</el-card>
<el-card class="box-card" shadow="never">
<div slot="header" class="clearfix">
<span class="role-span">指令相关</span>
</div>
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="78px">
<el-row>
<el-col :span="8">
<el-form-item label="关联设备" prop="device_code">
<el-select
v-model="form.link_device_code"
filterable
multiple
placeholder="请选择"
>
<el-option
v-for="item in deviceList"
:key="item.device_code"
:label="item.device_name"
:value="item.device_code"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<el-card class="box-card" shadow="never">
<div slot="header" class="clearfix">
<span class="role-span">PLC读取字段</span>