diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/model/DeviceFault.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/model/DeviceFault.java new file mode 100644 index 000000000..4bebefc10 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/model/DeviceFault.java @@ -0,0 +1,35 @@ +package org.nl.b_lms.pdm.error.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.security.Timestamp; + +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("device_fault_info") +public class DeviceFault implements Serializable { + private static final long serialVersionUID = 1L; + + @TableField(value = "device_code") + private String deviceCode; + + @TableField(value = "device_name") + private String deviceName; + + @TableField(value = "error_code") + private String errorCode; + + @TableField(value = "error_message") + private String errorMessage; + + @TableField(value = "start_time") + private String startTime; + + private int duration; + + +} \ No newline at end of file diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/model/mapper/DeviceFaultMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/model/mapper/DeviceFaultMapper.java new file mode 100644 index 000000000..821d4c100 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/model/mapper/DeviceFaultMapper.java @@ -0,0 +1,17 @@ +package org.nl.b_lms.pdm.error.model.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt; +import org.nl.b_lms.bst.ivt.cutpointivt.service.dto.CutpointAirShhaftDto; +import org.nl.b_lms.pdm.error.model.DeviceFault; +import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto; + +import java.util.List; + +/** + * @author lyd + * @date 2024-02-26 + **/ +public interface DeviceFaultMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/model/mapper/DeviceFaultMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/model/mapper/DeviceFaultMapper.xml new file mode 100644 index 000000000..de81e0284 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/model/mapper/DeviceFaultMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/service/DeviceFaultService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/service/DeviceFaultService.java new file mode 100644 index 000000000..222c2f17c --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/service/DeviceFaultService.java @@ -0,0 +1,9 @@ +package org.nl.b_lms.pdm.error.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.b_lms.pdm.error.model.DeviceFault; +import org.springframework.stereotype.Service; + +@Service +public interface DeviceFaultService extends IService { +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/service/FaultManager.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/service/FaultManager.java new file mode 100644 index 000000000..acce8dd09 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/service/FaultManager.java @@ -0,0 +1,105 @@ +package org.nl.b_lms.pdm.error.service; + +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.pdm.error.model.DeviceFault; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.basedata.master.service.FaultDeviceService; +import org.springframework.stereotype.Component; + +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +@Slf4j +@Component +public class FaultManager { + public final ConcurrentHashMap memory = new ConcurrentHashMap<>(); + + public void add(DeviceFault f) { + memory.put(f.getDeviceCode(), f); + } + + public static class CompareResult { + public final List toInsert; + public final Set endedKeys; + + public CompareResult(List toInsert, Set endedKeys) { + this.toInsert = toInsert; + this.endedKeys = endedKeys; + } + } + + public CompareResult compareAndCollectToInsert(long nowMillis, List latest) { + Set apiKeys = new HashSet<>(); + for (DeviceFault f : latest) apiKeys.add(f.getDeviceCode()); + Set memKeys = new HashSet<>(memory.keySet()); + log.info("内存数据-------"+ memKeys); + List toInsert = new ArrayList<>(); + Set ended = new HashSet<>(); + for (String k : memKeys) + if (!apiKeys.contains(k)) { + DeviceFault m = memory.get(k); + if (m != null) { + long sm = parseMillis(m.getStartTime()); + int durationSec = (int) Math.max(0, (nowMillis - sm) / 1000); + m.setDuration(durationSec); + toInsert.add(m); + ended.add(k); + } + } + for (DeviceFault f : latest) + if (!memKeys.contains(f.getDeviceCode())) { + f.setStartTime(formatMillis(nowMillis)); + f.setDuration(0); + add(f); + } + return new CompareResult(toInsert, ended); + } + + public void removeAll(Set keys) { + if (keys == null || keys.isEmpty()) return; + for (String k : keys) memory.remove(k); + } + + public void tick() { + long s = System.nanoTime(); + try { + long now = System.currentTimeMillis(); + //todo 调用ACS获取 + FaultDeviceService bean = SpringContextHolder.getBean(FaultDeviceService.class); + List latest = bean.getErrorDeviceInfo(null); + log.info("获取数据-------"+latest.toString()); + CompareResult result = compareAndCollectToInsert(now, latest); + List toInsert = result.toInsert; + log.info("插入数据-------"+toInsert.toString()); + DeviceFaultService bean1 = SpringContextHolder.getBean(DeviceFaultService.class); + bean1.saveBatch(toInsert); + + //插入到数据库当中 + removeAll(result.endedKeys); + } finally { + long ms = (System.nanoTime() - s) / 1_000_000; + if (ms > 5000) log.warn("process time(ms)=" + ms); + } + } + + private static long parseMillis(String s) { + if (s == null || s.isEmpty() || "0".equals(s)) return 0L; + try { + LocalDateTime dt = LocalDateTime.parse(s, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + return dt.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); + } catch (Exception e) { return 0L; } + } + + private static String formatMillis(long ms) { + LocalDateTime dt = Instant.ofEpochMilli(ms).atZone(ZoneId.systemDefault()).toLocalDateTime(); + return DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(dt); + } + +} \ No newline at end of file diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/service/impl/DeviceFaultServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/service/impl/DeviceFaultServiceImpl.java new file mode 100644 index 000000000..5e3aeb073 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/error/service/impl/DeviceFaultServiceImpl.java @@ -0,0 +1,11 @@ +package org.nl.b_lms.pdm.error.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.b_lms.pdm.error.model.DeviceFault; +import org.nl.b_lms.pdm.error.model.mapper.DeviceFaultMapper; +import org.nl.b_lms.pdm.error.service.DeviceFaultService; +import org.springframework.stereotype.Service; + +@Service +public class DeviceFaultServiceImpl extends ServiceImpl implements DeviceFaultService { +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSynErrorDevice.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSynErrorDevice.java new file mode 100644 index 000000000..926d52f59 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSynErrorDevice.java @@ -0,0 +1,41 @@ +package org.nl.b_lms.sch.tasks.first_floor_area.auto; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.pdm.error.service.FaultManager; +import org.nl.b_lms.sch.tasks.TwoOutBoxTask; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.sch.AcsTaskDto; +import org.nl.wms.sch.AcsUtil; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; + +import static org.nl.wms.util.TaskUtil.getRoutePlanCode; + + +@Slf4j +@Component +@RequiredArgsConstructor +public class AutoSynErrorDevice { + + //自动执行等待的桁架任务 + public void run() { + try { + FaultManager bean = SpringContextHolder.getBean(FaultManager.class); + bean.tick(); + } catch (Exception ex) { + log.error(ex.getMessage()); + } + } +}