diff --git a/lms/nladmin-system/nlsso-server/pom.xml b/lms/nladmin-system/nlsso-server/pom.xml
index b1d5f4e..0350f23 100644
--- a/lms/nladmin-system/nlsso-server/pom.xml
+++ b/lms/nladmin-system/nlsso-server/pom.xml
@@ -291,9 +291,10 @@
org.quartz-scheduler
quartz
+
com.yomahub
- tlog-core
+ tlog-all-spring-boot-starter
1.5.0
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java
index 14ddcca..af19bdd 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java
@@ -6,41 +6,90 @@ package org.nl.config.lucene;
* @Date: 2023/8/25
*/
public class LogMessageConstant {
- /** */
- public final static String SORT_NAME = "time";
- /** 级别 */
+ /**
+ * 标签
+ */
+ public final static String FIELD_LABEL = "label";
+ /**
+ * 时间
+ */
+ public final static String FIELD_SORT_NAME = "time";
+ /**
+ * IP
+ */
+ public final static String FIELD_IP = "ip";
+ /**
+ * 级别
+ */
public final static String FIELD_LEVEL = "level";
- /** 时间 */
+ /**
+ * 时间
+ */
public final static String FIELD_TIMESTAMP = "timestamp";
- /** 类的限定名 */
+ /**
+ * 类的限定名
+ */
public final static String FIELD_CLASS_NAME = "logger";
- /** 线程名 */
+ /**
+ * 线程名
+ */
public final static String FIELD_THREAD = "thread";
- /** 日志内容 */
+ /**
+ * 日志内容
+ */
public final static String FIELD_MESSAGE = "message";
+ /**
+ * tlogTraceId
+ */
public final static String FIELD_TRACEID = "tlogTraceId";
+ /**
+ * api地址
+ */
+ public final static String API = "requestMethod";
// 定义颜色值
- /** 文本颜色:黑色 */
+ /**
+ * 文本颜色:黑色
+ */
public final static String COLOR_BLACK = "\u001B[30m";
- /** 文本颜色:红色 */
+ /**
+ * 文本颜色:红色
+ */
public final static String COLOR_RED = "\u001B[31m";
- /** 文本颜色:绿色 */
+ /**
+ * 文本颜色:绿色
+ */
public final static String COLOR_GREEN = "\u001B[32m";
- /** 文本颜色:黄色 */
+ /**
+ * 文本颜色:黄色
+ */
public final static String COLOR_YELLOW = "\u001B[33m";
- /** 文本颜色:蓝色 */
+ /**
+ * 文本颜色:蓝色
+ */
public final static String COLOR_BLUE = "\u001B[34m";
- /** 文本颜色:品红色 */
+ /**
+ * 文本颜色:品红色
+ */
public final static String COLOR_MAGENTA = "\u001B[35m";
- /** 文本颜色:青色 */
+ /**
+ * 文本颜色:青色
+ */
public final static String COLOR_CYAN = "\u001B[36m";
- /** 文本颜色:白色 */
+ /**
+ * 文本颜色:白色
+ */
public final static String COLOR_WHITE = "\u001B[37m";
- /** 文本颜色重置 */
+ /**
+ * 文本颜色重置
+ */
public final static String COLOR_RESET = "\u001B[0m";
- /** 背景颜色:黄色 */
+ /**
+ * 背景颜色:黄色
+ */
public final static String BACKGROUND_YELLOW = "\u001B[43m";
- /** 索引路径 */
- public final static String INDEX_DIR = "E:\\lucene\\index";
+ /**
+ * 索引路径
+ */
+ public final static String INDEX_DIR = "D:\\software\\lucene\\index";
}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneAppender.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneAppender.java
index a4c204a..239557a 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneAppender.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneAppender.java
@@ -8,8 +8,9 @@ package org.nl.config.lucene;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.AppenderBase;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
import com.alibaba.ttl.TransmittableThreadLocal;
-import org.apache.commons.lang3.StringUtils;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.*;
import org.apache.lucene.index.IndexWriter;
@@ -20,6 +21,8 @@ import org.nl.common.utils.YmlConfigFileUtil;
import org.wltea.analyzer.lucene.IKAnalyzer;
import java.io.IOException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
import java.nio.file.Paths;
import java.util.List;
import java.util.Map;
@@ -34,7 +37,6 @@ public class LuceneAppender extends AppenderBase {
public static IndexWriter indexWriter;
-
@Override
public void start() {
super.start();
@@ -44,7 +46,7 @@ public class LuceneAppender extends AppenderBase {
// 获取配置值
String luceneDir = properties.getProperty("lucene.index.path");
- System.out.println("---index地址----"+luceneDir);
+ System.out.println("---index地址----" + luceneDir);
index = FSDirectory.open(Paths.get(luceneDir));
// 初始化 Lucene 索引
Analyzer analyzer = new IKAnalyzer();
@@ -58,26 +60,47 @@ public class LuceneAppender extends AppenderBase {
@Override
protected void append(ILoggingEvent event) {
+ String message = event.getFormattedMessage();
+ Map mdcPropertyMap = event.getMDCPropertyMap();
Document doc = new Document();
- for (Property property : this.properties.getProperties()) {
- LucenePropertyAndEncoder encoder = new LucenePropertyAndEncoder(property, this.context);
- String encode = encoder.encode(event);
- doc.add(new StringField(property.getName(), encode, Field.Store.YES));
+ long timeStamp = event.getTimeStamp();
+ // 获取本机的IP地址
+ String ipAddress = "-";
+ try {
+ ipAddress = InetAddress.getLocalHost().getHostAddress();
+ } catch (UnknownHostException e) {
+ throw new RuntimeException(e);
}
- Map map = event.getMDCPropertyMap();
- if (!map.isEmpty() && StringUtils.isNotEmpty(map.get("traceId"))){
- doc.add(new StringField("traceId",map.get("traceId"), Field.Store.YES));
- }else {
- doc.add(new StringField("traceId"," ", Field.Store.YES));
+ String formattedDateTime = DateUtil.format(new java.util.Date(timeStamp), "yyyy-MM-dd HH:mm:ss.SSS");
+ doc.add(new LongPoint(LogMessageConstant.FIELD_SORT_NAME, timeStamp));
+ doc.add(new NumericDocValuesField(LogMessageConstant.FIELD_SORT_NAME, timeStamp));
+ doc.add(new StringField(LogMessageConstant.FIELD_LEVEL, event.getLevel().toString(), Field.Store.YES));
+ doc.add(new StringField(LogMessageConstant.FIELD_TIMESTAMP, formattedDateTime, Field.Store.YES));
+ doc.add(new StoredField(LogMessageConstant.FIELD_CLASS_NAME, event.getLoggerName()));
+ doc.add(new StoredField(LogMessageConstant.FIELD_IP, ipAddress));
+ doc.add(new StoredField(LogMessageConstant.FIELD_THREAD, event.getThreadName()));
+ if (ObjectUtil.isNotEmpty(mdcPropertyMap)) {
+ String traceId = mdcPropertyMap.get(LogMessageConstant.FIELD_TRACEID);
+ String api = mdcPropertyMap.get(LogMessageConstant.API);
+ doc.add(new StringField(LogMessageConstant.FIELD_TRACEID,
+ ObjectUtil.isNotEmpty(traceId)
+ ? traceId
+ : "-"
+ , Field.Store.YES)
+ );
+ doc.add(new StringField(LogMessageConstant.FIELD_LABEL,
+ ObjectUtil.isNotEmpty(mdcPropertyMap.get("tag_name"))
+ ? mdcPropertyMap.get("tag_name")
+ : "-"
+ , Field.Store.YES)
+ );
+ doc.add(new StringField(LogMessageConstant.API, ObjectUtil.isNotEmpty(api) ? api : "-", Field.Store.YES));
}
-
- doc.add(new TextField(LogMessageConstant.FIELD_MESSAGE, event.getFormattedMessage(), Field.Store.YES));
- doc.add(new StringField(LogMessageConstant.FIELD_TIMESTAMP, String.valueOf(event.getTimeStamp()),Field.Store.YES));
- doc.add(new NumericDocValuesField(LogMessageConstant.SORT_NAME, event.getTimeStamp()));
+ doc.add(new TextField(LogMessageConstant.FIELD_MESSAGE, message, Field.Store.YES));
try {
indexWriter.addDocument(doc);
indexWriter.commit();
- } catch (Exception e) {
+ } catch (IOException e) {
e.printStackTrace();
}
}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Searcher.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Searcher.java
new file mode 100644
index 0000000..e420c44
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Searcher.java
@@ -0,0 +1,166 @@
+package org.nl.config.lucene;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.index.DirectoryReader;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.queryparser.classic.QueryParser;
+import org.apache.lucene.search.*;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.util.BytesRef;
+import org.wltea.analyzer.lucene.IKAnalyzer;
+
+import java.io.IOException;
+import java.nio.file.Paths;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
+import java.util.*;
+
+/**
+ * lucene查询器
+ */
+@Slf4j
+public class Searcher {
+
+ public static Map search(String indexDir, JSONObject whereJson) throws Exception {
+ //获取要查询的路径,也就是索引所在的位置
+ Directory dir = FSDirectory.open(Paths.get(indexDir));
+ IndexReader reader = DirectoryReader.open(dir);
+ //构建IndexSearcher
+ IndexSearcher searcher = new IndexSearcher(reader);
+ //标准分词器,会自动去掉空格啊,is a the等单词
+ Analyzer analyzer = new IKAnalyzer(true);
+
+ // 实际上Lucene本身不支持分页。因此我们需要自己进行逻辑分页。我们要准备分页参数:
+ // 每页条数
+ int pageSize = Integer.parseInt(whereJson.get("size").toString());
+ // 当前页码
+ int pageNum = Integer.parseInt(whereJson.get("page").toString()) - 1;
+ // 当前页的起始条数
+ int start = pageNum * pageSize;
+ // 当前页的结束条数(不能包含)
+ int end = start + pageSize;
+ // 创建排序对象,需要排序字段SortField,参数:字段的名称、字段的类型、是否反转如果是false,升序。true降序
+ Sort sort = new Sort(new SortField(LogMessageConstant.FIELD_SORT_NAME, SortField.Type.LONG, true));
+
+ TopDocs docs = null;
+ BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder();
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(1970, 0, 1);
+ //时间范围查询
+ JSONArray createTime = whereJson.getJSONArray("createTime");
+ String startDate = DateUtil.format(calendar.getTime(), "yyyy-MM-dd HH:mm:ss.SSS");
+ String endDate = DateUtil.format(new DateTime(), "yyyy-MM-dd HH:mm:ss.SSS");
+
+ if (createTime != null) {
+ startDate = createTime.getString(0);
+ endDate = createTime.getString(1);
+ }
+ // 字段之间的与或非关系,MUST表示and,MUST_NOT表示not,SHOULD表示or,有几个fields就必须有几个clauses
+ TermRangeQuery termRangeQuery = new TermRangeQuery("timestamp", new BytesRef(startDate),
+ new BytesRef(endDate), true, true);
+ booleanQueryBuilder.add(termRangeQuery, BooleanClause.Occur.MUST);
+ if (ObjectUtil.isNotEmpty(whereJson.get(LogMessageConstant.FIELD_MESSAGE))) {
+ //查询解析器
+ QueryParser queryParser = new QueryParser("message", analyzer);
+ Query query = queryParser.parse("message:" + whereJson.getString("message") + "~");
+ booleanQueryBuilder.add(query, BooleanClause.Occur.MUST);
+ }
+ if (ObjectUtil.isNotEmpty(whereJson.get(LogMessageConstant.FIELD_TRACEID))) {
+ //查询解析器
+ TermQuery termQuery = new TermQuery(new Term(LogMessageConstant.FIELD_TRACEID,
+ whereJson.getString(LogMessageConstant.FIELD_TRACEID).trim()));
+ booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST);
+ }
+ if (ObjectUtil.isNotEmpty(whereJson.get(LogMessageConstant.FIELD_LABEL))) {
+ //查询解析器
+ TermQuery termQuery = new TermQuery(new Term(LogMessageConstant.FIELD_LABEL,
+ whereJson.getString(LogMessageConstant.FIELD_LABEL).trim()));
+ booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST);
+ }
+ if (ObjectUtil.isNotEmpty(whereJson.get(LogMessageConstant.FIELD_LEVEL))) {
+ //查询解析器
+ TermQuery termQuery = new TermQuery(new Term(LogMessageConstant.FIELD_LEVEL,
+ whereJson.get(LogMessageConstant.FIELD_LEVEL).toString()));
+ booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST);
+ }
+ // 使用实体接收
+ List list = new ArrayList<>();
+ TopFieldCollector collector = TopFieldCollector.create(sort, 20000, 0);
+ searcher.search(booleanQueryBuilder.build(), collector);
+ docs = collector.topDocs(pageNum*pageSize, pageSize);
+ ScoreDoc[] scoreDocs = docs.scoreDocs;
+ int totalSize = collector.getTotalHits();
+
+ for (ScoreDoc scoreDoc : scoreDocs) {
+ Document doc = reader.document(scoreDoc.doc);
+ String logInfo = LogMessageConstant.COLOR_RED + doc.get(LogMessageConstant.FIELD_TIMESTAMP) +
+ LogMessageConstant.COLOR_RESET + " - " +
+ LogMessageConstant.COLOR_BLUE + doc.get(LogMessageConstant.FIELD_IP) +
+ LogMessageConstant.COLOR_RESET + " - " +
+ LogMessageConstant.COLOR_CYAN + doc.get(LogMessageConstant.API) +
+ LogMessageConstant.COLOR_RESET + " - " +
+ LogMessageConstant.COLOR_GREEN + "[" + doc.get(LogMessageConstant.FIELD_THREAD) + "]" +
+ LogMessageConstant.COLOR_RESET + " - " +
+ LogMessageConstant.COLOR_BLACK + doc.get(LogMessageConstant.FIELD_LEVEL) +
+ LogMessageConstant.COLOR_RESET + " - " +
+ LogMessageConstant.COLOR_MAGENTA + doc.get(LogMessageConstant.FIELD_CLASS_NAME) +
+ LogMessageConstant.COLOR_RESET + " - " +
+ LogMessageConstant.COLOR_GREEN + "<" + doc.get(LogMessageConstant.FIELD_TRACEID) + ">" +
+ LogMessageConstant.COLOR_RESET + " - " +
+ LogMessageConstant.COLOR_BLACK + highlightKeyword(doc.get(LogMessageConstant.FIELD_MESSAGE), whereJson.getString("message"));
+ list.add(logInfo);
+ }
+ reader.close();
+ JSONObject jo = new JSONObject();
+ jo.put("content", list);
+ jo.put("totalElements", totalSize);
+ return jo;
+ }
+
+ public static String highlightKeyword(String text, String keyword) {
+ if (ObjectUtil.isEmpty(keyword)) {
+ return text;
+ }
+
+ int startIndex = text.indexOf(keyword);
+ if (startIndex != -1) {
+ int endIndex = startIndex + keyword.length();
+ String beforeKeyword = text.substring(0, startIndex);
+ String afterKeyword = text.substring(endIndex);
+ String highlightedKeyword = LogMessageConstant.BACKGROUND_YELLOW + keyword + LogMessageConstant.COLOR_RESET
+ + LogMessageConstant.COLOR_BLACK;
+ return beforeKeyword + highlightedKeyword + afterKeyword;
+ } else {
+ return text;
+ }
+ }
+
+ public static void main(String[] args) throws IOException, ParseException {
+ // 获取当前时间
+ LocalDateTime now = LocalDateTime.now();
+ // 减去七天
+ LocalDateTime sevenDaysAgo = now.minus(7, ChronoUnit.DAYS);
+ // 转换为 Date 类型
+ Date sevenDaysAgoDate = Date.from(sevenDaysAgo.atZone(ZoneId.systemDefault()).toInstant());
+ // 获取时间戳
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
+ Date date = dateFormat.parse(String.valueOf(sevenDaysAgo));
+ long timestamp = date.getTime();
+ System.out.println(now);
+ System.out.println(sevenDaysAgo);
+ System.out.println(sevenDaysAgoDate);
+ System.out.println(timestamp);
+ }
+}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/ThreadPoolExecutorUtil.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/ThreadPoolExecutorUtil.java
index 00c1bfe..2e3b017 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/ThreadPoolExecutorUtil.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/ThreadPoolExecutorUtil.java
@@ -17,6 +17,10 @@ package org.nl.config.thread;
import org.nl.config.SpringContextHolder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
@@ -27,16 +31,21 @@ import java.util.concurrent.TimeUnit;
* @author Zheng Jie
* @date 2019年10月31日18:16:47
*/
+@Configuration
public class ThreadPoolExecutorUtil {
- public static ThreadPoolExecutor getPoll(){
- AsyncTaskProperties properties = SpringContextHolder.getBean(AsyncTaskProperties.class);
+ @Autowired
+ private AsyncTaskProperties asyncTaskProperties;
+
+ @Bean
+ @Primary
+ public ThreadPoolExecutor threadPoolExecutor() {
return new ThreadPoolExecutor(
- properties.getCorePoolSize(),
- properties.getMaxPoolSize(),
- properties.getKeepAliveSeconds(),
+ asyncTaskProperties.getCorePoolSize(),
+ asyncTaskProperties.getMaxPoolSize(),
+ asyncTaskProperties.getKeepAliveSeconds(),
TimeUnit.SECONDS,
- new ArrayBlockingQueue<>(properties.getQueueCapacity()),
+ new ArrayBlockingQueue<>(asyncTaskProperties.getQueueCapacity()),
new TheadFactoryName()
);
}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/Structattr.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/Structattr.java
index 232593c..5b66337 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/Structattr.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/Structattr.java
@@ -1,5 +1,7 @@
package org.nl.wms.basedata_manage.service.dao;
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@@ -183,11 +185,13 @@ public class Structattr implements Serializable {
/**
* 存储载具号
*/
+ @TableField(updateStrategy = FieldStrategy.IGNORED)
private String storagevehicle_code;
/**
* 存储载具类型
*/
+ @TableField(updateStrategy = FieldStrategy.IGNORED)
private String storagevehicle_type;
/**
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java
index 7f9824d..c0399be 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java
@@ -420,13 +420,12 @@ public class StructattrServiceImpl extends ServiceImpl update = new UpdateWrapper()
.set("frozen_qty", 0)
- .set("qty", subtract)
.set("update_time", now)
.set("status", GROUP_PLATE_STATUS.code("出库"))
.eq("group_id", vehicleMater.getGroup_id());
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/bigscreen_manage/service/impl/BigScreenServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/bigscreen_manage/service/impl/BigScreenServiceImpl.java
index 5dbdd1c..e418f36 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/bigscreen_manage/service/impl/BigScreenServiceImpl.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/bigscreen_manage/service/impl/BigScreenServiceImpl.java
@@ -7,7 +7,6 @@ import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.basedata_manage.service.dao.mapper.BsrealStorattrMapper;
@@ -61,39 +60,41 @@ public class BigScreenServiceImpl implements BigScreenService {
public List getData(List stors) {
// String storCode = "GW";
List result = new ArrayList<>();
- if (CollectionUtils.isEmpty(stors)){
+ if (CollectionUtils.isEmpty(stors)) {
return result;
}
for (String storCode : stors) {
JSONObject item = new JSONObject();
//1.【货位使用】数据
- item.put("title",storCode+"仓库");
+ item.put("title", storCode + "仓库");
item.put("pointUse", pointUse(storCode));
// //2.【实时库存分析】数据
item.put("ivtAnalyse", ivtAnalyse(storCode));
- //3.【出入库趋势】数据
+ //3.【出入库趋势】数据
item.put("inAndOutTrend", inAndOutTrend(storCode));
// //4.【今日出入库】数据
item.put("toDayInAndOut", toDayInAndOut(storCode));
// //5.【今日出入库】数据
item.put("realTask", realTask(storCode));
- //6.【未完成单据】数据
+ //6.【未完成单据】数据
item.put("unIos", unIos(storCode));
result.add(item);
}
return result;
}
+
/**
-//
-// * 货位使用
-// *
-// * @return JSONObject {
-// * total_qty: 总货位数
-// * use_qty: 已用货位
-// * emp_qty: 空余货位
-// * use_percentage: 百分比(使用货位百分比)
-// * }
-// */
+ * //
+ * // * 货位使用
+ * // *
+ * // * @return JSONObject {
+ * // * total_qty: 总货位数
+ * // * use_qty: 已用货位
+ * // * emp_qty: 空余货位
+ * // * use_percentage: 百分比(使用货位百分比)
+ * // * }
+ * //
+ */
private JSONObject pointUse(String storCode) {
// 返回数据
JSONObject result = new JSONObject();
@@ -120,7 +121,7 @@ public class BigScreenServiceImpl implements BigScreenService {
result.put("emp_qty", emp_qty);
// 使用货位百分比
double use_percentage = 0;
- if (total_qty != 0){
+ if (total_qty != 0) {
use_percentage = NumberUtil.mul(NumberUtil.div(use_qty, total_qty), 100);
}
result.put("use_percentage", NumberUtil.round(use_percentage, 2));
@@ -148,21 +149,23 @@ public class BigScreenServiceImpl implements BigScreenService {
int i = 0;
int top5 = 0;
for (IvtAnalyse json : list) {
- if (i==5){break;}
+ if (i == 5) {
+ break;
+ }
JSONObject item = new JSONObject();
item.put("ivt_qty", json.getSum_qty());
item.put("material_name", json.getMaterial_name());
- double percentage = NumberUtil.mul(json.getSum_qty()/sum, 100);
+ double percentage = NumberUtil.mul(sum == 0 ? 0 : json.getSum_qty() / sum, 100);
item.put("percentage", NumberUtil.round(percentage, 2));
topFiveList.add(item);
i++;
- top5 = top5+json.getSum_qty();
+ top5 = top5 + json.getSum_qty();
}
- if (sum>top5){
+ if (sum > top5) {
JSONObject other = new JSONObject();
- other.put("ivt_qty", sum-top5);
+ other.put("ivt_qty", sum - top5);
other.put("material_name", "其他物料");
- other.put("percentage", NumberUtil.round(1-top5/sum, 2));
+ other.put("percentage", NumberUtil.round(sum == 0 ? 0 : 1 - top5 / sum, 2));
topFiveList.add(other);
}
result.put("data", topFiveList);
@@ -318,7 +321,7 @@ public class BigScreenServiceImpl implements BigScreenService {
new QueryWrapper().lambda()
.le(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
- .ge(SchBaseTask::getCreate_time,DateUtil.today())
+ .ge(SchBaseTask::getCreate_time, DateUtil.today())
);
list.stream().forEach(item -> {
item.setTask_status(TaskStatus.convertName(item.getTask_status()));
@@ -342,7 +345,7 @@ public class BigScreenServiceImpl implements BigScreenService {
.ne(IOStorInv::getBill_status, IOSEnum.BILL_STATUS.code("完成"))
);
list.stream().forEach(item -> {
- item.setIo_type(item.getIo_type().equals(IOSEnum.IO_TYPE.code("入库"))?"入库":"出库");
+ item.setIo_type(item.getIo_type().equals(IOSEnum.IO_TYPE.code("入库")) ? "入库" : "出库");
if (item.getBill_status().equals(IOSEnum.BILL_STATUS.code("生成"))) {
item.setBill_status("生成");
}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/util/MesUtil.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/util/MesUtil.java
new file mode 100644
index 0000000..e44b7c2
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext_manage/util/MesUtil.java
@@ -0,0 +1,65 @@
+package org.nl.wms.ext_manage.util;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.nl.config.SpringContextHolder;
+import org.nl.wms.ext_manage.service.util.AcsResponse;
+import org.nl.wms.system_manage.enums.SysParamConstant;
+import org.nl.wms.system_manage.service.param.dao.Param;
+import org.nl.wms.system_manage.service.param.impl.SysParamServiceImpl;
+import org.nl.wms.warehouse_manage.enums.IOSConstant;
+
+/**
+ * @Author: lyd
+ * @Date: 2025/7/30
+ */
+@Slf4j
+public class MesUtil {
+ /**
+ * 下发任务
+ * @param api mes地址
+ * @param param 下发参数
+ * @return AcsResponse
+ */
+ public static AcsResponse notifyMes(String api, T param) {
+ log.info("下发MES的参数为:-------------------" + param.toString());
+ // 返回参数
+ AcsResponse resultAcs;
+ // 系统参数类
+ SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class);
+ //判断是否连接MES系统
+ Param isConnectMes = sysParamService.findByCode(SysParamConstant.IS_CONNECT_MES);
+ if (ObjectUtil.isEmpty(isConnectMes)) {
+ return AcsResponse.requestError("系统参数表中:" + SysParamConstant.IS_CONNECT_MES + "不存在");
+ }
+ if (isConnectMes.getValue().equals(IOSConstant.IS_DELETE_NO)) {
+ return AcsResponse.requestOkMessage("下发成功,未连接MES系统!");
+ }
+
+ //MES地址
+ Param acsUrlParam = sysParamService.findByCode(SysParamConstant.MES_URL);
+ if (ObjectUtil.isEmpty(acsUrlParam)) {
+ return AcsResponse.requestError("系统参数表中:" + SysParamConstant.MES_URL + "不存在");
+ }
+
+ String url = acsUrlParam.getValue() + api;
+ try {
+ String resultMsg = HttpRequest.post(url)
+ .body(String.valueOf(param))
+ .execute().body();
+ // 格式转换
+ JSONObject result = JSONObject.parseObject(resultMsg);
+ resultAcs = JSONObject.toJavaObject(result, AcsResponse.class);
+
+ log.info("下发MES任务的输出参数为:-------------------" + resultMsg);
+ } catch (Exception e) {
+ //网络不通
+ String msg = e.getMessage();
+ log.error("连接失败:{}", msg);
+ return AcsResponse.requestError("网络不通,操作失败!");
+ }
+ return resultAcs;
+ }
+}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/controller/PdaJBController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/controller/PdaJBController.java
index 6579d56..b6292a1 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/controller/PdaJBController.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/controller/PdaJBController.java
@@ -68,4 +68,40 @@ public class PdaJBController {
public ResponseEntity