Browse Source

fix:sorting呼叫载具及时修改货架状态,opc信号读取修复

master
yanps 6 months ago
parent
commit
804c7c54da
  1. 6
      acs/nladmin-system/nlsso-server/pom.xml
  2. 2
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java
  3. 34
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/plc_to_agv/ItemProtocol.java
  4. 20
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceOpcProtocolRunable.java
  5. 351
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceOpcSynchronizeAutoRun.java
  6. 2
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/OpcEntity.java
  7. 1
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/LuceneService.java
  8. 162
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneServiceImpl.java
  9. 33
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java
  10. 6
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/connector/service/impl/ConnectorToWmsServiceImpl.java
  11. 10
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/sorting/service/impl/SortingServiceImpl.java
  12. 3
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/ConnectorUtil.java
  13. 1
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/connector/FTGTask.java
  14. 3
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingCMTTask.java
  15. 3
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingCNTTask.java
  16. 34
      lms/nladmin-system/nlsso-server/src/main/resources/log/ConnectorAndSorting.xml
  17. 1
      lms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml

6
acs/nladmin-system/nlsso-server/pom.xml

@ -45,6 +45,12 @@
<type>pom</type> <type>pom</type>
</dependency> </dependency>
<dependency>
<groupId>org.dromara.dynamictp</groupId>
<artifactId>dynamic-tp-spring-boot-starter-adapter-webserver</artifactId>
<version>1.1.6</version>
</dependency>
<!-- Lucence核心包 --> <!-- Lucence核心包 -->
<dependency> <dependency>
<groupId>org.apache.lucene</groupId> <groupId>org.apache.lucene</groupId>

2
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java

@ -328,7 +328,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
if (ObjectUtil.isNotEmpty(extraValue.get("ignore_release_check")) && "true".equals(extraValue.get("ignore_release_check"))) { if (ObjectUtil.isNotEmpty(extraValue.get("ignore_release_check")) && "true".equals(extraValue.get("ignore_release_check"))) {
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0);
} else { } else {
data = feedBackStatus(data, index, 2, inst, task, 1, false); data = feedBackStatus(data, index, 3, inst, task, 1, false);
} }
} catch (Exception e) { } catch (Exception e) {
log.info("到达放货点反馈AGV状态失败:{}", e.getMessage()); log.info("到达放货点反馈AGV状态失败:{}", e.getMessage());

34
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/plc_to_agv/ItemProtocol.java

@ -1,5 +1,6 @@
package org.nl.acs.device_driver.basedriver.plc_to_agv; package org.nl.acs.device_driver.basedriver.plc_to_agv;
import cn.hutool.core.util.ObjectUtil;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.acs.device.device_driver.standard_inspect.ItemDto; import org.nl.acs.device.device_driver.standard_inspect.ItemDto;
@ -24,6 +25,8 @@ public class ItemProtocol {
private PlcToAgvDeviceDriver driver; private PlcToAgvDeviceDriver driver;
static Object msg;
public ItemProtocol(PlcToAgvDeviceDriver driver) { public ItemProtocol(PlcToAgvDeviceDriver driver) {
this.driver = driver; this.driver = driver;
} }
@ -57,6 +60,7 @@ public class ItemProtocol {
Boolean isonline; Boolean isonline;
public int getOpcIntegerValue(String protocol) { public int getOpcIntegerValue(String protocol) {
getExends();
Integer value = this.driver.getIntegeregerValue(protocol); Integer value = this.driver.getIntegeregerValue(protocol);
if (value == null) { if (value == null) {
// log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!"); // log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!");
@ -69,22 +73,36 @@ public class ItemProtocol {
} }
public void getExends(){
Object upper_lower_levels = this.driver.getExtraValue().get("upper_lower_levels");
if(ObjectUtil.isNotEmpty(upper_lower_levels)){
msg = upper_lower_levels;
}
}
public static List<ItemDto> getReadableItemDtos() { public static List<ItemDto> getReadableItemDtos() {
ArrayList list = new ArrayList(); ArrayList list = new ArrayList();
list.add(new ItemDto(item_AGVSetInLowerAllowed, "下层允许上料", "DB600.B0")); if(ObjectUtil.isNotEmpty(msg) && "1".equals(msg)){
list.add(new ItemDto(item_AGVSetOutLowerAllowed, "下层允许下料", "DB600.B2")); list.add(new ItemDto(item_AGVSetInUpperAllowed, "上层允许上料", "DB600.B3"));
list.add(new ItemDto(item_AGVSetInUpperAllowed, "上层允许上料", "DB600.B3")); list.add(new ItemDto(item_AGVSetOutUpperAllowed, "上层允许下料", "DB600.B4"));
list.add(new ItemDto(item_AGVSetOutUpperAllowed, "上层允许下料", "DB600.B4")); }else if(ObjectUtil.isNotEmpty(msg) && "2".equals(msg)){
list.add(new ItemDto(item_AGVSetInLowerAllowed, "下层允许上料", "DB600.B0"));
list.add(new ItemDto(item_AGVSetOutLowerAllowed, "下层允许下料", "DB600.B2"));
}
list.add(new ItemDto(item_AGVEnable, "agv动作使能", "DB600.D6")); list.add(new ItemDto(item_AGVEnable, "agv动作使能", "DB600.D6"));
return list; return list;
} }
public static List<ItemDto> getWriteableItemDtos() { public static List<ItemDto> getWriteableItemDtos() {
ArrayList list = new ArrayList(); ArrayList list = new ArrayList();
list.add(new ItemDto(item_AGVSetInReqLower, "下层上料请求", "DB600.B0")); if(ObjectUtil.isNotEmpty(msg) && "1".equals(msg)){
list.add(new ItemDto(item_AGVSetOutReqLower, "下层下料请求", "DB600.B2")); list.add(new ItemDto(item_AGVSetInReqUpper, "上层上料请求", "DB600.B3"));
list.add(new ItemDto(item_AGVSetInReqUpper, "上层上料请求", "DB600.B3")); list.add(new ItemDto(item_AGVSetOutReqUpper, "上层下料请求", "DB600.B4"));
list.add(new ItemDto(item_AGVSetOutReqUpper, "上层下料请求", "DB600.B4")); }else if(ObjectUtil.isNotEmpty(msg) && "2".equals(msg)){
list.add(new ItemDto(item_AGVSetInReqLower, "下层上料请求", "DB600.B0"));
list.add(new ItemDto(item_AGVSetOutReqLower, "下层下料请求", "DB600.B2"));
}
list.add(new ItemDto(item_AGVInOP, "在工位内", "DB600.D6")); list.add(new ItemDto(item_AGVInOP, "在工位内", "DB600.D6"));
return list; return list;
} }

20
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceOpcProtocolRunable.java

@ -149,7 +149,7 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC
if (log.isWarnEnabled()) { if (log.isWarnEnabled()) {
tag = Thread.currentThread().getName(); tag = Thread.currentThread().getName();
if (this.OpcServer != null) { if (this.OpcServer != null) {
tag = tag + this.getOpcGroupID(); tag = tag + "," + this.getOpcGroupID();
} }
} }
@ -189,6 +189,8 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC
Object value = OpcUtl.getValue(item, itemState); Object value = OpcUtl.getValue(item, itemState);
if (value != null) { if (value != null) {
valueAllNotNull = true; valueAllNotNull = true;
} else {
log.info("item:{},velue为空,value:{}", item.getId(), value);
} }
String itemId = item.getId(); String itemId = item.getId();
@ -201,7 +203,7 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC
if (!UnifiedDataAppService.isEquals(value, his)) { if (!UnifiedDataAppService.isEquals(value, his)) {
OpcItemDto itemDto = this.getItem(itemId); OpcItemDto itemDto = this.getItem(itemId);
if (true) { if (true) {
this.logItemChanged(itemId, accessor_value, value, itemDto); // this.logItemChanged(itemId, accessor_value, value, itemDto);
} }
if(!ObjectUtil.isEmpty(value) || "".equals(value)){ if(!ObjectUtil.isEmpty(value) || "".equals(value)){
accessor_value.setValue(itemId, value); accessor_value.setValue(itemId, value);
@ -225,13 +227,10 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC
} }
if (!valueAllNotNull) { if (!valueAllNotNull) {
int random = (new Random()).nextInt(10) + 1;
random *= 1000;
if (this.all_null < 3) { if (this.all_null < 3) {
if (log.isWarnEnabled()) { if (log.isWarnEnabled()) {
log.warn("{} 所有内容都为空, all_null:{} ,暂定{}s", tag, all_null,3); log.warn("OPC数据源: {} 所有内容都为空,检查网络, all_null:{} ,暂定{}s", tag, all_null,3);
} }
ThreadUtl.sleep( 3000); ThreadUtl.sleep( 3000);
break start; break start;
} else if (this.all_null < 6) { } else if (this.all_null < 6) {
@ -253,9 +252,10 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC
log.warn("{} 所有内容都为空, all_null:{} ,暂定{}ms", tag, all_null, 5000); log.warn("{} 所有内容都为空, all_null:{} ,暂定{}ms", tag, all_null, 5000);
} }
ThreadUtl.sleep((long) (5000)); ThreadUtl.sleep((long) (5000));
break start;
} }
++this.all_null; // ++this.all_null;
} else { } else {
this.all_null = 0; this.all_null = 0;
} }
@ -415,7 +415,8 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC
Object obj = accessor_value.getValue(relate); Object obj = accessor_value.getValue(relate);
sb.append("key:" + relate + "value:" + obj + ";"); sb.append("key:" + relate + "value:" + obj + ";");
} }
if (!itemDto.getItem_code().endsWith("heartbeat") && !itemDto.getItem_code().endsWith("time") && !itemDto.getItem_code().endsWith("consumption")) { if (!itemDto.getItem_code().endsWith("heartbeat") && !itemDto.getItem_code().endsWith("time") && !itemDto.getItem_code().endsWith("consumption")
&& !itemDto.getItem_code().endsWith("x") && !itemDto.getItem_code().endsWith("y")) {
// 存在上次点位值为null情况 则不记录日志 // 存在上次点位值为null情况 则不记录日志
if(!(his instanceof Float) && !(value instanceof Float)){ if(!(his instanceof Float) && !(value instanceof Float)){
LuceneLogDto luceneLogDto = new LuceneLogDto(itemDto.getOpc_server_code(), itemDto.getOpc_plc_code(),4, itemDto.getDevice_code(), itemDto.getItem_code().substring(itemDto.getItem_code().lastIndexOf(".") + 1), LuceneLogDto luceneLogDto = new LuceneLogDto(itemDto.getOpc_server_code(), itemDto.getOpc_plc_code(),4, itemDto.getDevice_code(), itemDto.getItem_code().substring(itemDto.getItem_code().lastIndexOf(".") + 1),
@ -428,7 +429,8 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC
} }
} }
} else { } else {
if (!itemDto.getItem_code().endsWith("heartbeat") && !itemDto.getItem_code().endsWith("time") && !itemDto.getItem_code().endsWith("consumption")) { if (!itemDto.getItem_code().endsWith("heartbeat") && !itemDto.getItem_code().endsWith("time") && !itemDto.getItem_code().endsWith("consumption")
&& !itemDto.getItem_code().endsWith("x") && !itemDto.getItem_code().endsWith("y")) {
if(!(his instanceof Float) && !(value instanceof Float)){ if(!(his instanceof Float) && !(value instanceof Float)){
LuceneLogDto luceneLogDto = new LuceneLogDto(itemDto.getOpc_server_code(), itemDto.getOpc_plc_code(),4, itemDto.getDevice_code(), itemDto.getItem_code().substring(itemDto.getItem_code().lastIndexOf(".") + 1), LuceneLogDto luceneLogDto = new LuceneLogDto(itemDto.getOpc_server_code(), itemDto.getOpc_plc_code(),4, itemDto.getDevice_code(), itemDto.getItem_code().substring(itemDto.getItem_code().lastIndexOf(".") + 1),
String.valueOf(his), String.valueOf(value)); String.valueOf(his), String.valueOf(value));

351
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceOpcSynchronizeAutoRun.java

@ -1,316 +1,109 @@
package org.nl.acs.opc; package org.nl.acs.opc;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON; import org.dromara.dynamictp.core.support.ThreadPoolBuilder;
import lombok.extern.slf4j.Slf4j;
import org.apache.lucene.util.NamedThreadFactory;
import org.nl.acs.AcsConfig;
import org.nl.acs.auto.run.AbstractAutoRunnable; import org.nl.acs.auto.run.AbstractAutoRunnable;
import org.nl.acs.opc.service.dto.OpcServerManageDto; import org.nl.acs.opc.service.dto.OpcServerManageDto;
import org.nl.acs.udw.UnifiedDataAccessor; import org.nl.config.thread.TheadFactoryName;
import org.nl.acs.udw.UnifiedDataAccessorFactory;
import org.nl.acs.udw.UnifiedDataAppService;
import org.nl.common.enums.LogTypeEnum;
import org.nl.config.SpringContextHolder;
import org.nl.system.service.lucene.dto.LuceneLogDto;
import org.nl.system.service.param.ISysParamService;
import org.openscada.opc.lib.da.Group;
import org.openscada.opc.lib.da.Item;
import org.openscada.opc.lib.da.ItemState;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.*; import javax.annotation.Resource;
import java.util.Map.Entry; import java.util.Iterator;
import java.util.concurrent.*; import java.util.List;
import java.util.regex.Pattern; import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import static org.dromara.dynamictp.common.em.QueueTypeEnum.MEMORY_SAFE_LINKED_BLOCKING_QUEUE;
/** /**
* OPC设备同步启动 * OPC设备同步启动
* @author 20220102CG\noblelift
*/ */
@Component @Component
@Slf4j
public class DeviceOpcSynchronizeAutoRun extends AbstractAutoRunnable { public class DeviceOpcSynchronizeAutoRun extends AbstractAutoRunnable {
static boolean isRun = true;
public static boolean isRun = false;
ExecutorService executorService = ThreadPoolBuilder.newBuilder()
.threadPoolName("deviceOpc_thread")
.threadFactory("deviceOpc_thread")
.corePoolSize(80)
.maximumPoolSize(100)
.keepAliveTime(40)
.timeUnit(TimeUnit.SECONDS)
.workQueue(MEMORY_SAFE_LINKED_BLOCKING_QUEUE.getName(), 2000)
.buildDynamic();
@Autowired @Autowired
private DeviceAppService deviceAppService; private DeviceAppService deviceAppService;
@Autowired @Autowired
private OpcServerManageService opcServerManageService; private OpcServerManageService opcServerManageService;
// @Autowired
// LuceneExecuteLogService lucene;
static ExecutorService executorService;
public static Map<String, OpcServerManageDto> opcServersConfig;
public static Map<String, OpcItemDto> itemCodeOpcItemDtoMapping = new ConcurrentHashMap();
static boolean canRefreshOpcEntity = true;
private long lastRefreshOpcEntityTime;
static UnifiedDataAccessor udw;
private static Map<String, Boolean> canReadOpcValues;
private static volatile Map<String, OpcEntity> opcCodeOpcEntityMapping;
public DeviceOpcSynchronizeAutoRun() {
this.lastRefreshOpcEntityTime = 0L;
}
@Override
public String getCode() { public String getCode() {
return DeviceOpcSynchronizeAutoRun.class.getSimpleName(); return DeviceOpcSynchronizeAutoRun.class.getSimpleName();
} }
@Override
public String getName() { public String getName() {
return "opc设备同步器"; return "opc设备同步器";
} }
static Group getGroup(String opcCode) throws Exception { @Override
OpcServerService opcServerService = SpringContextHolder.getBean(OpcServerService.class); public void autoRun() throws Exception {
return opcServerService.getServer(opcCode); {
} //Thread.sleep(10000L);
isRun = true;
static void submitTimeLimitTask(Runnable runnable, String opcCode) {
CompletableFuture<Void> future = CompletableFuture.runAsync(runnable, executorService); Map<String, OpcServerManageDto> servers = this.opcServerManageService.queryAllServerMap();
Map<String, List<List<OpcItemDto>>> pros;
// try { do {
// future.get(10L, TimeUnit.SECONDS); Thread.sleep(1000L);
// } catch (InterruptedException var9) { pros = this.deviceAppService.findAllFormatProtocolFromDriver();
// Thread.currentThread().interrupt(); } while (ObjectUtil.isEmpty(pros));
// } catch (ExecutionException var10) { Set<String> keys = pros.keySet();
// var10.printStackTrace(); Iterator var4 = keys.iterator();
// } catch (TimeoutException var11) { //代码执行一次
// itemCodeOpcItemDtoMapping.keySet().forEach((key) -> { while (var4.hasNext()) {
// udw.setValue(key, (Object) null); String key = (String) var4.next();
// }); List<List<OpcItemDto>> list = (List) pros.get(key);
// canReadOpcValues = new ConcurrentHashMap<>(); OpcServerManageDto opcServer = (OpcServerManageDto) servers.get(key);
// System.out.println("opc设备同步器 任务执行超时,取消任务..."); Iterator var8 = list.iterator();
// future.cancel(true); while (var8.hasNext()) {
// } finally { List<OpcItemDto> groupProtols = (List) var8.next();
// canRefreshOpcEntity = true; DeviceOpcProtocolRunable runable = new DeviceOpcProtocolRunable();
// if (opcCode != null) { runable.setProtocols(groupProtols);
// canReadOpcValues.put(opcCode, true); runable.setOpcServer(opcServer);
// } this.executorService.submit(runable);
//
// }
}
private ExecutorService createThreadPool() {
ThreadPoolExecutor executor = new ThreadPoolExecutor(32, 32, 10L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), new NamedThreadFactory("opc-sync"));
executor.allowCoreThreadTimeOut(true);
return executor;
}
public void autoRun() {
OpcStartTag.is_run = true;
opcServersConfig = this.opcServerManageService.queryAllServerMap();
executorService = this.createThreadPool();
opcCodeOpcEntityMapping = new ConcurrentHashMap();
itemCodeOpcItemDtoMapping.keySet().forEach((key) -> {
udw.setValue(key, (Object) null);
});
canRefreshOpcEntity = true;
canReadOpcValues.clear();
while (true) {
this.refreshOpcEntity();
Iterator var1 = opcServersConfig.keySet().iterator();
while (var1.hasNext()) {
String opcCode = (String) var1.next();
submitTimeLimitTask(() -> {
boolean in = false;
try {
if (canReadOpcValues.computeIfAbsent(opcCode, (key) -> true)) {
in = true;
canReadOpcValues.put(opcCode, false);
this.readOpcValues(opcCode);
}
} catch (Exception var3) {
var3.printStackTrace();
} finally {
canRefreshOpcEntity = true;
if (opcCode != null && in) {
canReadOpcValues.put(opcCode, true);
}
}
}, opcCode);
}
ThreadUtl.sleep((long) OpcConfig.synchronized_millisecond);
}
}
private void readOpcValues(String opcCode) throws Exception {
synchronized (opcCode.intern()) {
OpcEntity opcEntity = (OpcEntity) opcCodeOpcEntityMapping.get(opcCode);
if (opcEntity != null) {
if (opcEntity.getItems().size() != 0) {
long begin = System.currentTimeMillis();
if (log.isTraceEnabled()) {
log.trace("opc {} 开始计时{}", opcCode, begin);
}
new HashMap();
Map<Item, ItemState> itemStatus;
try {
itemStatus = opcEntity.readAll();
} catch (Exception var15) {
itemStatus = opcEntity.readDividually();
}
long end = System.currentTimeMillis();
long duration = end - begin;
if (log.isTraceEnabled()) {
log.trace("opc {} 读取耗时:{}", opcCode, duration);
}
if (duration > 1000L) {
log.warn("opc {} 读取超时 : {}", opcCode, duration);
}
// boolean allNull = itemStatus.entrySet().stream().map((map) -> {
// return OpcUtl.getValue((Item)map.getKey(), (ItemState)map.getValue());
// }).allMatch(Objects::isNull);
// if (allNull) {
// opcEntity.getItems().clear();
// }
UnifiedDataAccessor udw = opcEntity.getUdw();
Set<Item> items = itemStatus.keySet();
Iterator var18 = items.iterator();
while (var18.hasNext()) {
Item item = (Item) var18.next();
ItemState itemState = (ItemState) itemStatus.get(item);
Object nowValue = OpcUtl.getValue(item, itemState);
String itemId = item.getId();
Object historyValue = udw.getValue(itemId);
if (!ObjectUtl.isEquals(itemState.getQuality(), QualityTypeValue.OPC_QUALITY_GOOD) && historyValue != null) {
log.warn("opc 值不健康 item: {}, 状态: {}", itemId, itemState.getQuality());
}
if (!UnifiedDataAppService.isEquals(nowValue, historyValue)) {
OpcItemDto itemDto = (OpcItemDto) itemCodeOpcItemDtoMapping.get(itemId);
if (true) {
this.logItemChanged(itemId, udw, nowValue, itemDto);
}
udw.setValue(itemId, nowValue);
}
}
} }
} }
}
}
private void refreshOpcEntity() {
if (canRefreshOpcEntity) {
canRefreshOpcEntity = false;
long now = System.currentTimeMillis();
if (now - this.lastRefreshOpcEntityTime >= 20000L) {
this.lastRefreshOpcEntityTime = now;
submitTimeLimitTask(() -> {
try {
Map<String, List<List<OpcItemDto>>> protocol = this.deviceAppService.findAllFormatProtocolFromDriver();
Iterator var2 = protocol.entrySet().iterator();
while (var2.hasNext()) { // 同步无光电设备信号
Entry<String, List<List<OpcItemDto>>> stringListEntry = (Entry) var2.next(); //Map<String, List<List<OpcItemDto>>> pros1 = this.deviceAppService.findAllFormatProtocolFromDriver();
String opcCode = (String) stringListEntry.getKey(); //List<DeviceDriver> opcDrivers = this.deviceAppService.findDeviceDriver(DeviceDriver.class);
List<List<OpcItemDto>> opcItemDtos = (List) stringListEntry.getValue();
((OpcEntity) opcCodeOpcEntityMapping.computeIfAbsent(opcCode, OpcEntity::new)).reload(opcItemDtos);
}
} catch (Exception var6) {
var6.printStackTrace();
} finally {
canRefreshOpcEntity = true;
}
}, (String) null); while (true) {
Thread.sleep(3000L);
} }
} }
} }
private void logMessage(String errorMessage) { @Override
try {
// issueLogger.setResource(OpcConfig.resource_code, OpcConfig.resource_name).setError(StringUtl.getString(100), "设备同步通信异常").log(errorMessage, new Object[0]);
// businessLogger.setResource(OpcConfig.resource_code, OpcConfig.resource_name).setError(StringUtl.getString(100), "设备同步通信异常").log(errorMessage, new Object[0]);
} catch (Exception var5) {
var5.printStackTrace();
}
}
public void after() { public void after() {
OpcStartTag.is_run = false; isRun = false;
opcCodeOpcEntityMapping.values().forEach((opcEntity) -> { this.executorService.shutdownNow();
opcEntity.cleanUdwCache(); this.executorService = ThreadPoolBuilder.newBuilder()
OpcServerService opcServerService = SpringContextHolder.getBean(OpcServerService.class); .threadPoolName("deviceOpc_thread")
opcServerService.cleanGroups(opcEntity.getOpcCode()); .threadFactory("deviceOpc_thread")
}); .corePoolSize(80)
opcCodeOpcEntityMapping = new ConcurrentHashMap(); .maximumPoolSize(100)
itemCodeOpcItemDtoMapping = new ConcurrentHashMap(); .keepAliveTime(40)
executorService.shutdownNow(); .timeUnit(TimeUnit.SECONDS)
} .workQueue(MEMORY_SAFE_LINKED_BLOCKING_QUEUE.getName(), 2000)
.buildDynamic();
private void logItemChanged(String itemId, UnifiedDataAccessor accessor_value, Object value, OpcItemDto itemDto) {
ISysParamService paramService = SpringContextHolder.getBean(ISysParamService.class);
Object his = accessor_value.getValue(itemId);
List<String> relate_items = itemDto.getRelate_items();
if (relate_items != null && !relate_items.isEmpty()) {
StringBuilder sb = new StringBuilder();
Iterator var8 = relate_items.iterator();
while (var8.hasNext()) {
String relate = (String) var8.next();
Object obj = accessor_value.getValue(relate);
sb.append("key:" + relate + "value: " + obj + ";");
}
if (!itemDto.getItem_code().endsWith("heartbeat") && !itemDto.getItem_code().endsWith("time") && !itemDto.getItem_code().endsWith("consumption")) {
// 存在上次点位值为null情况 则不记录日志
if(!(his instanceof Float) && !(value instanceof Float)){
LuceneLogDto luceneLogDto = new LuceneLogDto(itemDto.getOpc_server_code(), itemDto.getOpc_plc_code(),4, itemDto.getDevice_code(), itemDto.getItem_code().substring(itemDto.getItem_code().lastIndexOf(".") + 1),
String.valueOf(his), String.valueOf(value));
luceneLogDto.setLogType(LogTypeEnum.DEVICE_LOG.getDesc());
String logLevel = paramService.findByCode(AcsConfig.LOGLEVEL).getValue();
if(StrUtil.isNotEmpty(logLevel) && isNumeric(logLevel) && (luceneLogDto.getLog_level() >= Integer.parseInt(logLevel))){
log.info("{}", JSON.toJSONString(luceneLogDto));
}
}
}
} else {
// if (!itemDto.getItem_code().endsWith("heartbeat") && !itemDto.getItem_code().endsWith("time") && !itemDto.getItem_code().endsWith("consumption")) {
// if(!(his instanceof Float) && !(value instanceof Float)){
// LuceneLogDto luceneLogDto = new LuceneLogDto(itemDto.getOpc_server_code(), itemDto.getOpc_plc_code(), itemDto.getDevice_code(), itemDto.getItem_code().substring(itemDto.getItem_code().lastIndexOf(".") + 1),
// String.valueOf(his), String.valueOf(value));
// luceneLogDto.setLogType(LogTypeEnum.DEVICE_LOG.getDesc());
// log.info("{}", JSON.toJSONString(luceneLogDto));
// }
// }
if (!itemDto.getItem_code().endsWith("heartbeat") && !itemDto.getItem_code().endsWith("time") && !itemDto.getItem_code().endsWith("consumption")) {
if(!(his instanceof Float) && !(value instanceof Float)){
LuceneLogDto luceneLogDto = new LuceneLogDto(itemDto.getOpc_server_code(), itemDto.getOpc_plc_code(),4, itemDto.getDevice_code(), itemDto.getItem_code().substring(itemDto.getItem_code().lastIndexOf(".") + 1),
String.valueOf(his), String.valueOf(value));
luceneLogDto.setLogType(LogTypeEnum.DEVICE_LOG.getDesc());
String logLevel = paramService.findByCode(AcsConfig.LOGLEVEL).getValue();
if(StrUtil.isNotEmpty(logLevel) && isNumeric(logLevel) && (luceneLogDto.getLog_level() >= Integer.parseInt(logLevel))){
log.info("{}", JSON.toJSONString(luceneLogDto));
}
}
}
}
}
static {
udw = UnifiedDataAccessorFactory.getAccessor(OpcConfig.udw_opc_value_key);
canReadOpcValues = new ConcurrentHashMap();
opcCodeOpcEntityMapping = new ConcurrentHashMap();
}
public static boolean isNumeric(String str) {
return Pattern.compile("^[0-9]+$").matcher(str).matches();
} }
} }

2
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/OpcEntity.java

@ -1,3 +1,4 @@
/*
package org.nl.acs.opc; package org.nl.acs.opc;
import org.nl.acs.opc.DeviceOpcSynchronizeAutoRun; import org.nl.acs.opc.DeviceOpcSynchronizeAutoRun;
@ -178,3 +179,4 @@ public class OpcEntity {
return this.opcCode; return this.opcCode;
} }
} }
*/

1
acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/LuceneService.java

@ -11,7 +11,6 @@ public interface LuceneService {
* 获取labels和values树 * 获取labels和values树
* @return * @return
*/ */
// JSONArray getLabelsValues();
/** /**
* 获取数据分页 * 获取数据分页

162
acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneServiceImpl.java

@ -1,18 +1,28 @@
package org.nl.system.service.lucene.impl; package org.nl.system.service.lucene.impl;
import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.date.DateTime;
import cn.hutool.http.HttpUtil; import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.config.lucene.Searcher; import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.*;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.BytesRef;
import org.nl.system.service.lucene.LuceneService; import org.nl.system.service.lucene.LuceneService;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Map; import java.nio.file.Paths;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@Service @Service
@ -20,66 +30,108 @@ import java.util.Map;
@Slf4j @Slf4j
public class LuceneServiceImpl implements LuceneService { public class LuceneServiceImpl implements LuceneService {
// @Value("${loki.url}")
// private String lokiUrl;
// @Value("${loki.systemName}")
// private String systemName;
//日志索引目录 //日志索引目录
@Value("${lucene.index.path}")
private String luceneUrl;
/**
* 获取labels和values树
*
* @return
*/
// @Override
// public JSONArray getLabelsValues() {
// JSONArray result = new JSONArray();
// // 获取所有标签
// String labelString = HttpUtil.get(lokiUrl + "/labels", CharsetUtil.CHARSET_UTF_8);
// JSONObject parse = (JSONObject) JSONObject.parse(labelString);
// JSONArray labels = parse.getJSONArray("data");
// for (int i=0; i<labels.size(); i++) {
// // 获取标签下的所有值
// String valueString = HttpUtil.get(lokiUrl + "/label/" + labels.getString(i) + "/values", CharsetUtil.CHARSET_UTF_8);
// JSONObject parse2 = (JSONObject) JSONObject.parse(valueString);
// JSONArray values = parse2.getJSONArray("data");
// JSONArray children = new JSONArray();
// // 组成树形状态 两级
// for (int j=0; j<values.size(); j++) {
// JSONObject leaf = new JSONObject();
// leaf.put("label", values.getString(j));
// leaf.put("value", values.getString(j));
// children.add(leaf);
// }
//
// JSONObject node = new JSONObject();
// node.put("label", labels.getString(i));
// node.put("value", labels.getString(i));
// node.put("children", children);
// result.add(node);
// }
// return result;
// }
@Override @Override
public Map<String, Object> getAll(Map whereJson, Pageable page) { public Map<String, Object> getAll(Map whereJson, Pageable page) {
JSONObject jo = new JSONObject(); //获取要查询的路径,也就是索引所在的位置
try { try {
JSONObject jsonObject = (JSONObject) Searcher.search(luceneUrl, "", whereJson); Resource resource = new ClassPathResource("config/application.yml");
JSONArray array = jsonObject.getJSONArray("content"); YamlPropertiesFactoryBean yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean();
int totalElements = Integer.parseInt(jsonObject.get("totalElements").toString()); yamlPropertiesFactoryBean.setResources(resource);
jo.put("content", array); Properties properties = yamlPropertiesFactoryBean.getObject();
jo.put("totalElements", totalElements); // 获取配置值
String luceneDir = properties.getProperty("lucene.index.path");
FSDirectory directory = FSDirectory.open(Paths.get(luceneDir));
DirectoryReader open = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(open);
// 实际上Lucene本身不支持分页。因此我们需要自己进行逻辑分页。我们要准备分页参数:
int pageSize = Integer.parseInt(whereJson.get("size").toString());// 每页条数
int pageNum = Integer.parseInt(whereJson.get("page").toString());// 当前页码
BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder();
//时间范围查询
String startDate = (String) whereJson.get("begin_time");
String endDate = (String) whereJson.get("end_time");
if (startDate == null){
Calendar calendar=Calendar.getInstance();
calendar.set(1970, 0, 1);
startDate = DateUtil.format(calendar.getTime(),"yyyy-MM-dd HH:mm:ss.SSS");
}else{
startDate = getDate(startDate);
}
if (endDate == null){
endDate = DateUtil.format(new DateTime(),"yyyy-MM-dd HH:mm:ss.SSS");
} else {
endDate = getDate(endDate);
}
TermRangeQuery termRangeQuery = new TermRangeQuery("logTime", new BytesRef(startDate), new BytesRef(endDate), true, true);
booleanQueryBuilder.add(termRangeQuery, BooleanClause.Occur.MUST);
if (whereJson.get("device_code") != null){
Query termQuery = new TermQuery(new Term("device_code", (String) whereJson.get("device_code")));
booleanQueryBuilder.add(termQuery,BooleanClause.Occur.MUST);
}
if (whereJson.get("method") != null){
Query termQuery = new TermQuery(new Term("method", (String) whereJson.get("method")));
booleanQueryBuilder.add(termQuery,BooleanClause.Occur.MUST);
}
if (whereJson.get("status_code") != null){
Query termQuery = new TermQuery(new Term("status_code", (String) whereJson.get("status_code")));
booleanQueryBuilder.add(termQuery,BooleanClause.Occur.MUST);
}
if (whereJson.get("requestparam") != null){
WildcardQuery query = new WildcardQuery(new Term("requestparam", "*"+(String) whereJson.get("requestparam")+"*"));
booleanQueryBuilder.add(query,BooleanClause.Occur.MUST);
}
if (whereJson.get("responseparam") != null){
WildcardQuery query = new WildcardQuery(new Term("responseparam", "*"+(String) whereJson.get("responseparam")+"*"));
booleanQueryBuilder.add(query,BooleanClause.Occur.MUST);
}
if (whereJson.get("blurry") != null) {
WildcardQuery query = new WildcardQuery(new Term("fieldContent", "*"+(String) whereJson.get("blurry")+"*"));
booleanQueryBuilder.add(query, BooleanClause.Occur.MUST);
}
TopFieldCollector collector = TopFieldCollector.create(new Sort(new SortField("logTime", SortField.Type.LONG,true)), 20000, 0);
searcher.search(booleanQueryBuilder.build(), collector);
TopDocs topDocs = collector.topDocs(pageNum*pageSize, pageSize);
int totalSize = collector.getTotalHits();
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
List<JSONObject> list = new ArrayList<>();
for (ScoreDoc scoreDoc : scoreDocs) {
Document doc = open.document(scoreDoc.doc);
JSONObject object = new JSONObject();
object.put("content",doc.get("fieldContent"));
object.put("device_code",doc.get("device_code"));
object.put("logTime",doc.get("logTime"));
object.put("method",doc.get("method"));
object.put("status_code",doc.get("status_code"));
object.put("requestparam",doc.get("requestparam"));
object.put("responseparam",doc.get("responseparam"));
if(doc.get("fieldContent") != null) {
list.add(object);
}
}
open.close();
directory.close();
JSONObject jo = new JSONObject();
jo.put("content", list);
jo.put("totalElements", totalSize);
return jo;
} catch (Exception e) { } catch (Exception e) {
log.error("索引查询为空", e); log.error("索引查询为空", e);
throw new NullPointerException("索引查询为空"); throw new NullPointerException("索引查询为空");
} }
}
return jo; public static String getDate(String timeString) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");//时间格式
Date date = sdf.parse(timeString);
timeString = DateUtil.format(date, "yyyy-MM-dd HH:mm:ss.SSS");//格式化后的时间
return timeString;
} }
} }

33
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java

@ -384,27 +384,25 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
*/ */
private void releaseComplete(SchBaseTask schBaseTask, String status, String is_connector, String taskType, boolean is_empty) { private void releaseComplete(SchBaseTask schBaseTask, String status, String is_connector, String taskType, boolean is_empty) {
//TODO:空料容放货完成反馈给Connector //TODO:空料容放货完成反馈给Connector
if (!is_empty) { if ("1".equals(is_connector)) {
finishTask(schBaseTask.getTask_code(), schBaseTask.getPoint_code2()); if (!is_empty) {
} else { finishTask(schBaseTask.getTask_code(), schBaseTask.getPoint_code2());
finishTask(schBaseTask.getTask_code(), schBaseTask.getPoint_code1()); } else {
if ("1".equals(is_connector)) { finishTask(schBaseTask.getTask_code(), schBaseTask.getPoint_code1());
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
json.put("vehicle_code", schBaseTask.getVehicle_code()); json.put("vehicle_code", schBaseTask.getVehicle_code());
json.put("status", status); json.put("status", status);
json.put("device_code", schBaseTask.getPoint_code2()); json.put("device_code", schBaseTask.getPoint_code2());
json.put("task_code", schBaseTask.getTask_code()); json.put("task_code", schBaseTask.getTask_code());
AcsResponse acsResponse = connectorService.feedAgvTaskStatus(json); AcsResponse acsResponse = connectorService.feedAgvTaskStatus(json);
}
if ("2".equals(is_connector)) {
JSONObject json = new JSONObject();
json.put("vehicle_code", schBaseTask.getVehicle_code());
json.put("status", status);
json.put("device_code", schBaseTask.getPoint_code2());
json.put("task_code", schBaseTask.getTask_code());
AcsResponse acsResponse = sortingService.feedAgvTaskStatus(json);
} }
} else if ("2".equals(is_connector)) {
JSONObject json = new JSONObject();
json.put("vehicle_code", schBaseTask.getVehicle_code());
json.put("status", status);
json.put("device_code", schBaseTask.getPoint_code2());
json.put("task_code", schBaseTask.getTask_code());
AcsResponse acsResponse = sortingService.feedAgvTaskStatus(json);
} }
} }
@ -509,13 +507,14 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
boolean flag = true; boolean flag = true;
AcsResponse acsResponse = sortingService.feedAgvTaskStatus(json); AcsResponse acsResponse = sortingService.feedAgvTaskStatus(json);
if (acsResponse.getStatus() != 200 || StringUtils.isNotEmpty(acsResponse.getErrMsg())) { if (acsResponse.getStatus() != 200 || StringUtils.isNotEmpty(acsResponse.getErrMsg())) {
throw new BadRequestException("申请失败,"+ acsResponse.getErrMsg()); throw new BadRequestException("申请失败," + acsResponse.getErrMsg());
} }
} }
} }
/** /**
* 申请放货 * 申请放货
*
* @param schBaseTask * @param schBaseTask
* @param status * @param status
* @param is_connector * @param is_connector
@ -531,9 +530,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
boolean flag = true; boolean flag = true;
AcsResponse acsResponse = sortingService.feedAgvTaskStatus(json); AcsResponse acsResponse = sortingService.feedAgvTaskStatus(json);
if (acsResponse.getStatus() != 200 || StringUtils.isNotEmpty(acsResponse.getErrMsg())) { if (acsResponse.getStatus() != 200 || StringUtils.isNotEmpty(acsResponse.getErrMsg())) {
throw new BadRequestException("申请失败,"+ acsResponse.getErrMsg()); throw new BadRequestException("申请失败," + acsResponse.getErrMsg());
} }
}else if("1".equals(is_connector)){ } else if ("1".equals(is_connector)) {
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
json.put("vehicle_code", schBaseTask.getVehicle_code()); json.put("vehicle_code", schBaseTask.getVehicle_code());
json.put("status", status); json.put("status", status);

6
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/connector/service/impl/ConnectorToWmsServiceImpl.java

@ -96,11 +96,7 @@ public class ConnectorToWmsServiceImpl implements ConnectorToWmsService {
param.put("task_code", task_code); param.put("task_code", task_code);
param.put("remark", remark); param.put("remark", remark);
param.put("ext_data", data); param.put("ext_data", data);
try{ connectorTask.apply(param);
connectorTask.apply(param);
}catch (Exception e){
return MapOf.of("status", 400,"msg", e.getMessage());
}
schBasePoint.setIs_lock(true); schBasePoint.setIs_lock(true);
schBasePointService.updateById(schBasePoint); schBasePointService.updateById(schBasePoint);
map1.put("task_code", task_code); map1.put("task_code", task_code);

10
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/sorting/service/impl/SortingServiceImpl.java

@ -10,6 +10,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.gson.Gson; import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.region.RegionEnum; import org.nl.common.enums.region.RegionEnum;
import org.nl.config.IdUtil; import org.nl.config.IdUtil;
import org.nl.config.MapOf; import org.nl.config.MapOf;
@ -38,6 +39,7 @@ import java.util.Map;
/** /**
* @author LENOVO * @author LENOVO
*/ */
@Slf4j
@Service @Service
public class SortingServiceImpl implements SortingService { public class SortingServiceImpl implements SortingService {
@ -51,6 +53,7 @@ public class SortingServiceImpl implements SortingService {
@Override @Override
public Map createAgvTask(JSONObject jsonObject) { public Map createAgvTask(JSONObject jsonObject) {
log.info("sorting下发agv任务:{}",jsonObject);
try { try {
Assert.noNullElements(new Object[]{jsonObject,jsonObject.getString("pointCode"),jsonObject.getString("vehicle_code") Assert.noNullElements(new Object[]{jsonObject,jsonObject.getString("pointCode"),jsonObject.getString("vehicle_code")
,jsonObject.getString("task_type"),jsonObject.getString("is_empty")},"请求参数不能为空"); ,jsonObject.getString("task_type"),jsonObject.getString("is_empty")},"请求参数不能为空");
@ -85,20 +88,19 @@ public class SortingServiceImpl implements SortingService {
AbstractTask connectorTask = taskFactory.getTask("CNTTask"); AbstractTask connectorTask = taskFactory.getTask("CNTTask");
if(SortingEnum.TASK_TYPE_ONE.getValue().equals(task_type) && SortingEnum.IS_EMPTY.getValue().equals(is_empty)){ if(SortingEnum.TASK_TYPE_ONE.getValue().equals(task_type) && SortingEnum.IS_EMPTY.getValue().equals(is_empty)){
taskParam.put("config_code","SortingCNTTask"); taskParam.put("config_code","SortingCNTTask");
connectorTask.apply(taskParam);
//TODO:叫料 //TODO:叫料
}else if(SortingEnum.TASK_TYPE_ONE.getValue().equals(task_type) && SortingEnum.NOT_EMPTY.getValue().equals(is_empty)){ }else if(SortingEnum.TASK_TYPE_ONE.getValue().equals(task_type) && SortingEnum.NOT_EMPTY.getValue().equals(is_empty)){
taskParam.put("config_code","SortingCMTTask"); taskParam.put("config_code","SortingCMTTask");
connectorTask.apply(taskParam);
//TODO:将空托盘放到线边库 //TODO:将空托盘放到线边库
}else if(SortingEnum.TASK_TYPE_TWO.getValue().equals(task_type) && SortingEnum.IS_EMPTY.getValue().equals(is_empty)){ }else if(SortingEnum.TASK_TYPE_TWO.getValue().equals(task_type) && SortingEnum.IS_EMPTY.getValue().equals(is_empty)){
taskParam.put("config_code","SortingSNTTask"); taskParam.put("config_code","SortingSNTTask");
connectorTask.apply(taskParam);
//TODO:将满料放到线边库 //TODO:将满料放到线边库
}else if(SortingEnum.TASK_TYPE_TWO.getValue().equals(task_type) && SortingEnum.NOT_EMPTY.getValue().equals(is_empty)){ }else if(SortingEnum.TASK_TYPE_TWO.getValue().equals(task_type) && SortingEnum.NOT_EMPTY.getValue().equals(is_empty)){
taskParam.put("config_code","SortingSMTTask"); taskParam.put("config_code","SortingSMTTask");
}
try{
connectorTask.apply(taskParam); connectorTask.apply(taskParam);
}catch (Exception e){
return MapOf.of("status", 400,"msg", e.getMessage());
} }
return MapOf.of("status", 200,"msg", "sucess"); return MapOf.of("status", 200,"msg", "sucess");
}catch (Exception ex){ }catch (Exception ex){

3
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/ConnectorUtil.java

@ -122,7 +122,7 @@ public class ConnectorUtil {
return AcsResponse.requestRefuse("未连接ACS!"); return AcsResponse.requestRefuse("未连接ACS!");
} }
String url = connectorUrl + api; String url = connectorUrl + api;
log.info("下发acs任务的参数为:{}", JSON.toJSONString(object)); log.info("反馈sortingAGV状态:{},url:{}", JSON.toJSONString(object),url);
AcsResponse resultForAcs; AcsResponse resultForAcs;
try { try {
String resultMsg = HttpRequest.post(url) String resultMsg = HttpRequest.post(url)
@ -130,6 +130,7 @@ public class ConnectorUtil {
.execute().body(); .execute().body();
result = JSONObject.parseObject(resultMsg); result = JSONObject.parseObject(resultMsg);
resultForAcs = JSONObject.toJavaObject(result, AcsResponse.class); resultForAcs = JSONObject.toJavaObject(result, AcsResponse.class);
log.info("反馈sortingAGV状态的响应:{}", JSON.toJSONString(resultMsg));
} catch (Exception e) { } catch (Exception e) {
String msg = e.getMessage(); String msg = e.getMessage();
//网络不通 //网络不通

1
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/connector/FTGTask.java

@ -71,6 +71,7 @@ public class FTGTask extends AbstractTask {
// 设置终点并修改创建成功状态 // 设置终点并修改创建成功状态
task.setPoint_code1(schBasePoint.getPoint_code()); task.setPoint_code1(schBasePoint.getPoint_code());
task.setVehicle_type(schBasePoint.getCan_vehicle_type()); task.setVehicle_type(schBasePoint.getCan_vehicle_type());
task.setVehicle_code(schBasePoint.getVehicle_code());
task.setRemark(""); task.setRemark("");
task.setTask_status(TaskStatus.CREATED.getCode()); task.setTask_status(TaskStatus.CREATED.getCode());
taskService.updateById(task); taskService.updateById(task);

3
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingCMTTask.java

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.GoodsEnum;
import org.nl.common.enums.region.RegionEnum; import org.nl.common.enums.region.RegionEnum;
import org.nl.common.exception.BadRequestException; import org.nl.common.exception.BadRequestException;
import org.nl.system.service.notice.ISysNoticeService; import org.nl.system.service.notice.ISysNoticeService;
@ -25,6 +26,7 @@ import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch.task_manage.AbstractTask; import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.GeneralDefinition; import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.nl.wms.sch.task_manage.task.core.TaskStatus; import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.util.PointUtils; import org.nl.wms.util.PointUtils;
@ -98,6 +100,7 @@ public class SortingCMTTask extends AbstractTask {
pointService.update(new UpdateWrapper<SchBasePoint>() pointService.update(new UpdateWrapper<SchBasePoint>()
.set("ing_task_code",task.getTask_code()) .set("ing_task_code",task.getTask_code())
.set("is_lock",true) .set("is_lock",true)
.set("point_status", GoodsEnum.OUT_OF_STOCK.getValue())
.eq("point_code",structPoint.getPoint_code())); .eq("point_code",structPoint.getPoint_code()));
} }
} }

3
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingCNTTask.java

@ -5,8 +5,10 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.GoodsEnum;
import org.nl.common.enums.VehicleEnum; import org.nl.common.enums.VehicleEnum;
import org.nl.common.enums.region.RegionEnum; import org.nl.common.enums.region.RegionEnum;
import org.nl.common.enums.wms.PointStatusEnum;
import org.nl.common.exception.BadRequestException; import org.nl.common.exception.BadRequestException;
import org.nl.system.service.notice.ISysNoticeService; import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.ext.acs.service.dto.to.BaseResponse; import org.nl.wms.ext.acs.service.dto.to.BaseResponse;
@ -69,6 +71,7 @@ public class SortingCNTTask extends AbstractTask {
pointService.update(new UpdateWrapper<SchBasePoint>() pointService.update(new UpdateWrapper<SchBasePoint>()
.set("ing_task_code",task.getTask_code()) .set("ing_task_code",task.getTask_code())
.set("is_lock",true) .set("is_lock",true)
.set("point_status", GoodsEnum.OUT_OF_STOCK.getValue())
.eq("point_code",basePoint.getPoint_code())); .eq("point_code",basePoint.getPoint_code()));
} }
} }

34
lms/nladmin-system/nlsso-server/src/main/resources/log/ConnectorAndSorting.xml

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<included>
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
<property name="LOG_HOME" value="${logPath}"/>
<!--<define name="DEVICECODE" class="org.nl.common.logging.DeviceCodeDir"/>-->
<!-- 按照每天生成日志文件 -->
<appender name="FILE_11" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/connectorOrSorting/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
<!--单个日志最大容量 至少10MB才能看得出来-->
<maxFileSize>200MB</maxFileSize>
<!--所有日志最多占多大容量-->
<totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>${log.charset}</charset>
</encoder>
</appender>
<!-- <logger name="org.nl.start.Init" level="info" additivity="false">
<appender-ref ref="FILE3"/>
</logger>-->
<!-- 打印sql -->
<logger name="org.nl.wms.sch.task_manage.task.ConnectorUtil" level="info" additivity="false">
<appender-ref ref="FILE_11"/>
</logger>
</included>

1
lms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml

@ -18,6 +18,7 @@
</appender> </appender>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="${logPath}"/> <property name="LOG_HOME" value="${logPath}"/>
<include resource="log/ConnectorAndSorting.xml"/>
<!-- 按照每天生成日志文件 --> <!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">

Loading…
Cancel
Save