fix: 日志、定时任务
This commit is contained in:
@@ -42,6 +42,10 @@ public class LogMessageConstant {
|
|||||||
* tlogTraceId
|
* tlogTraceId
|
||||||
*/
|
*/
|
||||||
public final static String FIELD_TRACEID = "tlogTraceId";
|
public final static String FIELD_TRACEID = "tlogTraceId";
|
||||||
|
/**
|
||||||
|
* api地址
|
||||||
|
*/
|
||||||
|
public final static String API = "requestMethod";
|
||||||
// 定义颜色值
|
// 定义颜色值
|
||||||
/**
|
/**
|
||||||
* 文本颜色:黑色
|
* 文本颜色:黑色
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import ch.qos.logback.core.AppenderBase;
|
|||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.alibaba.ttl.TransmittableThreadLocal;
|
import com.alibaba.ttl.TransmittableThreadLocal;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.apache.lucene.analysis.Analyzer;
|
import org.apache.lucene.analysis.Analyzer;
|
||||||
import org.apache.lucene.document.*;
|
import org.apache.lucene.document.*;
|
||||||
import org.apache.lucene.index.IndexWriter;
|
import org.apache.lucene.index.IndexWriter;
|
||||||
@@ -38,7 +37,6 @@ public class LuceneAppender extends AppenderBase<ILoggingEvent> {
|
|||||||
public static IndexWriter indexWriter;
|
public static IndexWriter indexWriter;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start() {
|
public void start() {
|
||||||
super.start();
|
super.start();
|
||||||
@@ -48,7 +46,7 @@ public class LuceneAppender extends AppenderBase<ILoggingEvent> {
|
|||||||
|
|
||||||
// 获取配置值
|
// 获取配置值
|
||||||
String luceneDir = properties.getProperty("lucene.index.path");
|
String luceneDir = properties.getProperty("lucene.index.path");
|
||||||
System.out.println("---index地址----"+luceneDir);
|
System.out.println("---index地址----" + luceneDir);
|
||||||
index = FSDirectory.open(Paths.get(luceneDir));
|
index = FSDirectory.open(Paths.get(luceneDir));
|
||||||
// 初始化 Lucene 索引
|
// 初始化 Lucene 索引
|
||||||
Analyzer analyzer = new IKAnalyzer();
|
Analyzer analyzer = new IKAnalyzer();
|
||||||
@@ -81,11 +79,22 @@ public class LuceneAppender extends AppenderBase<ILoggingEvent> {
|
|||||||
doc.add(new StoredField(LogMessageConstant.FIELD_CLASS_NAME, event.getLoggerName()));
|
doc.add(new StoredField(LogMessageConstant.FIELD_CLASS_NAME, event.getLoggerName()));
|
||||||
doc.add(new StoredField(LogMessageConstant.FIELD_IP, ipAddress));
|
doc.add(new StoredField(LogMessageConstant.FIELD_IP, ipAddress));
|
||||||
doc.add(new StoredField(LogMessageConstant.FIELD_THREAD, event.getThreadName()));
|
doc.add(new StoredField(LogMessageConstant.FIELD_THREAD, event.getThreadName()));
|
||||||
if (ObjectUtil.isNotEmpty(mdcPropertyMap) && ObjectUtil.isNotEmpty(mdcPropertyMap.get(LogMessageConstant.FIELD_TRACEID))) {
|
if (ObjectUtil.isNotEmpty(mdcPropertyMap)) {
|
||||||
String traceId = mdcPropertyMap.get(LogMessageConstant.FIELD_TRACEID);
|
String traceId = mdcPropertyMap.get(LogMessageConstant.FIELD_TRACEID);
|
||||||
doc.add(new StringField(LogMessageConstant.FIELD_TRACEID, traceId, Field.Store.YES));
|
String api = mdcPropertyMap.get(LogMessageConstant.API);
|
||||||
doc.add(new StringField(LogMessageConstant.FIELD_LABEL, ObjectUtil.isNotEmpty(mdcPropertyMap.get("tag_name"))
|
doc.add(new StringField(LogMessageConstant.FIELD_TRACEID,
|
||||||
? mdcPropertyMap.get("tag_name") : "-", Field.Store.YES));
|
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, message, Field.Store.YES));
|
doc.add(new TextField(LogMessageConstant.FIELD_MESSAGE, message, Field.Store.YES));
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -109,6 +109,8 @@ public class Searcher {
|
|||||||
LogMessageConstant.COLOR_RESET + " - " +
|
LogMessageConstant.COLOR_RESET + " - " +
|
||||||
LogMessageConstant.COLOR_BLUE + doc.get(LogMessageConstant.FIELD_IP) +
|
LogMessageConstant.COLOR_BLUE + doc.get(LogMessageConstant.FIELD_IP) +
|
||||||
LogMessageConstant.COLOR_RESET + " - " +
|
LogMessageConstant.COLOR_RESET + " - " +
|
||||||
|
LogMessageConstant.COLOR_CYAN + doc.get(LogMessageConstant.API) +
|
||||||
|
LogMessageConstant.COLOR_RESET + " - " +
|
||||||
LogMessageConstant.COLOR_GREEN + "[" + doc.get(LogMessageConstant.FIELD_THREAD) + "]" +
|
LogMessageConstant.COLOR_GREEN + "[" + doc.get(LogMessageConstant.FIELD_THREAD) + "]" +
|
||||||
LogMessageConstant.COLOR_RESET + " - " +
|
LogMessageConstant.COLOR_RESET + " - " +
|
||||||
LogMessageConstant.COLOR_BLACK + doc.get(LogMessageConstant.FIELD_LEVEL) +
|
LogMessageConstant.COLOR_BLACK + doc.get(LogMessageConstant.FIELD_LEVEL) +
|
||||||
|
|||||||
@@ -17,6 +17,10 @@ package org.nl.config.thread;
|
|||||||
|
|
||||||
|
|
||||||
import org.nl.config.SpringContextHolder;
|
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.ArrayBlockingQueue;
|
||||||
import java.util.concurrent.ThreadPoolExecutor;
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
@@ -27,16 +31,21 @@ import java.util.concurrent.TimeUnit;
|
|||||||
* @author Zheng Jie
|
* @author Zheng Jie
|
||||||
* @date 2019年10月31日18:16:47
|
* @date 2019年10月31日18:16:47
|
||||||
*/
|
*/
|
||||||
|
@Configuration
|
||||||
public class ThreadPoolExecutorUtil {
|
public class ThreadPoolExecutorUtil {
|
||||||
|
|
||||||
public static ThreadPoolExecutor getPoll(){
|
@Autowired
|
||||||
AsyncTaskProperties properties = SpringContextHolder.getBean(AsyncTaskProperties.class);
|
private AsyncTaskProperties asyncTaskProperties;
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@Primary
|
||||||
|
public ThreadPoolExecutor threadPoolExecutor() {
|
||||||
return new ThreadPoolExecutor(
|
return new ThreadPoolExecutor(
|
||||||
properties.getCorePoolSize(),
|
asyncTaskProperties.getCorePoolSize(),
|
||||||
properties.getMaxPoolSize(),
|
asyncTaskProperties.getMaxPoolSize(),
|
||||||
properties.getKeepAliveSeconds(),
|
asyncTaskProperties.getKeepAliveSeconds(),
|
||||||
TimeUnit.SECONDS,
|
TimeUnit.SECONDS,
|
||||||
new ArrayBlockingQueue<>(properties.getQueueCapacity()),
|
new ArrayBlockingQueue<>(asyncTaskProperties.getQueueCapacity()),
|
||||||
new TheadFactoryName()
|
new TheadFactoryName()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -420,13 +420,12 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
|
|||||||
Structattr structattr = this.getByCode(changeDto.getStructCode());
|
Structattr structattr = this.getByCode(changeDto.getStructCode());
|
||||||
for (GroupPlate vehicleMater : groupPlates) {
|
for (GroupPlate vehicleMater : groupPlates) {
|
||||||
String vehicleCode = vehicleMater.getStoragevehicle_code();
|
String vehicleCode = vehicleMater.getStoragevehicle_code();
|
||||||
BigDecimal subtract = vehicleMater.getQty().add(vehicleMater.getFrozen_qty());
|
BigDecimal subtract = vehicleMater.getFrozen_qty();
|
||||||
//100-出50 = 50
|
//100-出50 = 50
|
||||||
//如果出库是手持库出确认则不在这边变动组盘信息
|
//如果出库是手持库出确认则不在这边变动组盘信息
|
||||||
if (!changeDto.getInBound()) {
|
if (!changeDto.getInBound()) {
|
||||||
UpdateWrapper<GroupPlate> update = new UpdateWrapper<GroupPlate>()
|
UpdateWrapper<GroupPlate> update = new UpdateWrapper<GroupPlate>()
|
||||||
.set("frozen_qty", 0)
|
.set("frozen_qty", 0)
|
||||||
.set("qty", subtract)
|
|
||||||
.set("update_time", now)
|
.set("update_time", now)
|
||||||
.set("status", GROUP_PLATE_STATUS.code("出库"))
|
.set("status", GROUP_PLATE_STATUS.code("出库"))
|
||||||
.eq("group_id", vehicleMater.getGroup_id());
|
.eq("group_id", vehicleMater.getGroup_id());
|
||||||
|
|||||||
@@ -43,7 +43,8 @@ public class BigScreenController {
|
|||||||
@Log("大屏数据")
|
@Log("大屏数据")
|
||||||
@SaIgnore
|
@SaIgnore
|
||||||
public ResponseEntity<Object> getData(@RequestBody JSONObject stors) {
|
public ResponseEntity<Object> getData(@RequestBody JSONObject stors) {
|
||||||
String storStr = stors.getString("stors");
|
// String storStr = stors.getString("stors");
|
||||||
|
String storStr = "LT,YL";
|
||||||
List<JSONObject> data = new ArrayList<>();
|
List<JSONObject> data = new ArrayList<>();
|
||||||
if (!StringUtils.isEmpty(storStr)){
|
if (!StringUtils.isEmpty(storStr)){
|
||||||
data = bigScreenService.getData(Arrays.asList(storStr.split(",")));
|
data = bigScreenService.getData(Arrays.asList(storStr.split(",")));
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import cn.hutool.core.util.NumberUtil;
|
|||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
|
||||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
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.Structattr;
|
||||||
import org.nl.wms.basedata_manage.service.dao.mapper.BsrealStorattrMapper;
|
import org.nl.wms.basedata_manage.service.dao.mapper.BsrealStorattrMapper;
|
||||||
@@ -61,39 +60,41 @@ public class BigScreenServiceImpl implements BigScreenService {
|
|||||||
public List<JSONObject> getData(List<String> stors) {
|
public List<JSONObject> getData(List<String> stors) {
|
||||||
// String storCode = "GW";
|
// String storCode = "GW";
|
||||||
List result = new ArrayList<>();
|
List result = new ArrayList<>();
|
||||||
if (CollectionUtils.isEmpty(stors)){
|
if (CollectionUtils.isEmpty(stors)) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
for (String storCode : stors) {
|
for (String storCode : stors) {
|
||||||
JSONObject item = new JSONObject();
|
JSONObject item = new JSONObject();
|
||||||
//1.【货位使用】数据
|
//1.【货位使用】数据
|
||||||
item.put("title",storCode+"仓库");
|
item.put("title", storCode + "仓库");
|
||||||
item.put("pointUse", pointUse(storCode));
|
item.put("pointUse", pointUse(storCode));
|
||||||
// //2.【实时库存分析】数据
|
// //2.【实时库存分析】数据
|
||||||
item.put("ivtAnalyse", ivtAnalyse(storCode));
|
item.put("ivtAnalyse", ivtAnalyse(storCode));
|
||||||
//3.【出入库趋势】数据
|
//3.【出入库趋势】数据
|
||||||
item.put("inAndOutTrend", inAndOutTrend(storCode));
|
item.put("inAndOutTrend", inAndOutTrend(storCode));
|
||||||
// //4.【今日出入库】数据
|
// //4.【今日出入库】数据
|
||||||
item.put("toDayInAndOut", toDayInAndOut(storCode));
|
item.put("toDayInAndOut", toDayInAndOut(storCode));
|
||||||
// //5.【今日出入库】数据
|
// //5.【今日出入库】数据
|
||||||
item.put("realTask", realTask(storCode));
|
item.put("realTask", realTask(storCode));
|
||||||
//6.【未完成单据】数据
|
//6.【未完成单据】数据
|
||||||
item.put("unIos", unIos(storCode));
|
item.put("unIos", unIos(storCode));
|
||||||
result.add(item);
|
result.add(item);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
//
|
* //
|
||||||
// * 货位使用
|
* // * 货位使用
|
||||||
// *
|
* // *
|
||||||
// * @return JSONObject {
|
* // * @return JSONObject {
|
||||||
// * total_qty: 总货位数
|
* // * total_qty: 总货位数
|
||||||
// * use_qty: 已用货位
|
* // * use_qty: 已用货位
|
||||||
// * emp_qty: 空余货位
|
* // * emp_qty: 空余货位
|
||||||
// * use_percentage: 百分比(使用货位百分比)
|
* // * use_percentage: 百分比(使用货位百分比)
|
||||||
// * }
|
* // * }
|
||||||
// */
|
* //
|
||||||
|
*/
|
||||||
private JSONObject pointUse(String storCode) {
|
private JSONObject pointUse(String storCode) {
|
||||||
// 返回数据
|
// 返回数据
|
||||||
JSONObject result = new JSONObject();
|
JSONObject result = new JSONObject();
|
||||||
@@ -120,7 +121,7 @@ public class BigScreenServiceImpl implements BigScreenService {
|
|||||||
result.put("emp_qty", emp_qty);
|
result.put("emp_qty", emp_qty);
|
||||||
// 使用货位百分比
|
// 使用货位百分比
|
||||||
double use_percentage = 0;
|
double use_percentage = 0;
|
||||||
if (total_qty != 0){
|
if (total_qty != 0) {
|
||||||
use_percentage = NumberUtil.mul(NumberUtil.div(use_qty, total_qty), 100);
|
use_percentage = NumberUtil.mul(NumberUtil.div(use_qty, total_qty), 100);
|
||||||
}
|
}
|
||||||
result.put("use_percentage", NumberUtil.round(use_percentage, 2));
|
result.put("use_percentage", NumberUtil.round(use_percentage, 2));
|
||||||
@@ -148,21 +149,23 @@ public class BigScreenServiceImpl implements BigScreenService {
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
int top5 = 0;
|
int top5 = 0;
|
||||||
for (IvtAnalyse json : list) {
|
for (IvtAnalyse json : list) {
|
||||||
if (i==5){break;}
|
if (i == 5) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
JSONObject item = new JSONObject();
|
JSONObject item = new JSONObject();
|
||||||
item.put("ivt_qty", json.getSum_qty());
|
item.put("ivt_qty", json.getSum_qty());
|
||||||
item.put("material_name", json.getMaterial_name());
|
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));
|
item.put("percentage", NumberUtil.round(percentage, 2));
|
||||||
topFiveList.add(item);
|
topFiveList.add(item);
|
||||||
i++;
|
i++;
|
||||||
top5 = top5+json.getSum_qty();
|
top5 = top5 + json.getSum_qty();
|
||||||
}
|
}
|
||||||
if (sum>top5){
|
if (sum > top5) {
|
||||||
JSONObject other = new JSONObject();
|
JSONObject other = new JSONObject();
|
||||||
other.put("ivt_qty", sum-top5);
|
other.put("ivt_qty", sum - top5);
|
||||||
other.put("material_name", "其他物料");
|
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);
|
topFiveList.add(other);
|
||||||
}
|
}
|
||||||
result.put("data", topFiveList);
|
result.put("data", topFiveList);
|
||||||
@@ -318,7 +321,7 @@ public class BigScreenServiceImpl implements BigScreenService {
|
|||||||
new QueryWrapper<SchBaseTask>().lambda()
|
new QueryWrapper<SchBaseTask>().lambda()
|
||||||
.le(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
|
.le(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
|
||||||
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
|
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
|
||||||
.ge(SchBaseTask::getCreate_time,DateUtil.today())
|
.ge(SchBaseTask::getCreate_time, DateUtil.today())
|
||||||
);
|
);
|
||||||
list.stream().forEach(item -> {
|
list.stream().forEach(item -> {
|
||||||
item.setTask_status(TaskStatus.convertName(item.getTask_status()));
|
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("完成"))
|
.ne(IOStorInv::getBill_status, IOSEnum.BILL_STATUS.code("完成"))
|
||||||
);
|
);
|
||||||
list.stream().forEach(item -> {
|
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("生成"))) {
|
if (item.getBill_status().equals(IOSEnum.BILL_STATUS.code("生成"))) {
|
||||||
item.setBill_status("生成");
|
item.setBill_status("生成");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,24 +3,21 @@ package org.nl.wms.sch_manage.service.util;
|
|||||||
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||||
|
import org.nl.wms.system_manage.enums.TagNameEnum;
|
||||||
import org.nl.wms.warehouse_manage.enums.IOSConstant;
|
import org.nl.wms.warehouse_manage.enums.IOSConstant;
|
||||||
import org.redisson.api.RLock;
|
import org.slf4j.MDC;
|
||||||
import org.redisson.api.RedissonClient;
|
|
||||||
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.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class AutoTask {
|
public class AutoTask {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -35,21 +32,12 @@ public class AutoTask {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private TaskFactory taskFactory;
|
private TaskFactory taskFactory;
|
||||||
|
|
||||||
private final RedissonClient redissonClient;
|
|
||||||
//定时任务
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public void run() {
|
public void run() {
|
||||||
RLock lock = redissonClient.getLock(this.getClass().getName());
|
MDC.put(TagNameEnum.TAG_NAME.getTag(), TagNameEnum.AUTO_TASK_SEND.getTag());
|
||||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
log.info("定时器正在执行下发任务调度...");
|
||||||
try {
|
sendTask();
|
||||||
if (tryLock) {
|
log.info("定时器执行下发任务调度结束...");
|
||||||
sendTask();
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
if (tryLock) {
|
|
||||||
lock.unlock();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -58,7 +46,8 @@ public class AutoTask {
|
|||||||
private void sendTask() {
|
private void sendTask() {
|
||||||
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||||
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
|
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
|
||||||
.eq(SchBaseTask::getTask_status, TaskStatus.CREATE.getCode()));
|
.eq(SchBaseTask::getTask_status, TaskStatus.CREATE.getCode())
|
||||||
|
.orderByAsc(SchBaseTask::getTask_group_seq));
|
||||||
if (ObjectUtil.isEmpty(taskList)) {
|
if (ObjectUtil.isEmpty(taskList)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,15 @@ import lombok.Getter;
|
|||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum TagNameEnum {
|
public enum TagNameEnum {
|
||||||
|
/**
|
||||||
|
* 请勿作为mdc的value,只能作为key
|
||||||
|
*/
|
||||||
|
TAG_NAME("tag_name"),
|
||||||
/**
|
/**
|
||||||
* LMS系统
|
* LMS系统
|
||||||
*/
|
*/
|
||||||
LMS("LMS系统"),
|
LMS("LMS系统"),
|
||||||
|
AUTO_TASK_SEND("自动下发任务到ACS"),
|
||||||
/**
|
/**
|
||||||
* 标记符号
|
* 标记符号
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.nl.wms.system_manage.service.quartz.utils;
|
package org.nl.wms.system_manage.service.quartz.utils;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.yomahub.tlog.task.quartz.TLogQuartzJobBean;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import org.nl.common.utils.RedisUtils;
|
import org.nl.common.utils.RedisUtils;
|
||||||
@@ -30,17 +31,17 @@ import java.util.concurrent.ThreadPoolExecutor;
|
|||||||
@SuppressWarnings({"unchecked", "all"})
|
@SuppressWarnings({"unchecked", "all"})
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@DisallowConcurrentExecution
|
@DisallowConcurrentExecution
|
||||||
public class ExecutionJob extends QuartzJobBean {
|
public class ExecutionJob extends TLogQuartzJobBean {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 该处仅供参考
|
* 该处仅供参考
|
||||||
*/
|
*/
|
||||||
@Resource
|
@Resource
|
||||||
@Qualifier("meshandlerPool")
|
@Qualifier("threadPoolExecutor")
|
||||||
private ThreadPoolExecutor EXECUTOR;
|
private ThreadPoolExecutor EXECUTOR;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
|
public void executeTask(JobExecutionContext context) throws JobExecutionException {
|
||||||
SysQuartzJob quartzJob = (SysQuartzJob) context.getMergedJobDataMap().get(SysQuartzJob.JOB_KEY);
|
SysQuartzJob quartzJob = (SysQuartzJob) context.getMergedJobDataMap().get(SysQuartzJob.JOB_KEY);
|
||||||
// 获取spring bean
|
// 获取spring bean
|
||||||
ISysQuartzJobService quartzJobService = SpringContextHolder.getBean(SysQuartzJobServiceImpl.class);
|
ISysQuartzJobService quartzJobService = SpringContextHolder.getBean(SysQuartzJobServiceImpl.class);
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import static org.quartz.TriggerBuilder.newTrigger;
|
|||||||
public class QuartzManage {
|
public class QuartzManage {
|
||||||
private static final String JOB_NAME = "TASK_";
|
private static final String JOB_NAME = "TASK_";
|
||||||
|
|
||||||
@Resource(name = "quartzScheduler")
|
@Resource(name = "scheduler")
|
||||||
private Scheduler scheduler;
|
private Scheduler scheduler;
|
||||||
|
|
||||||
public void addJob(SysQuartzJob quartzJob) {
|
public void addJob(SysQuartzJob quartzJob) {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
|
|||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.nl.common.domain.query.PageQuery;
|
import org.nl.common.domain.query.PageQuery;
|
||||||
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
|
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
|
||||||
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
|
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
|
||||||
@@ -25,6 +26,7 @@ import java.util.Set;
|
|||||||
* @author Liuxy
|
* @author Liuxy
|
||||||
* @since 2025-05-23
|
* @since 2025-05-23
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class MdPbGroupplateServiceImpl extends ServiceImpl<MdPbGroupplateMapper, GroupPlate> implements IMdPbGroupplateService {
|
public class MdPbGroupplateServiceImpl extends ServiceImpl<MdPbGroupplateMapper, GroupPlate> implements IMdPbGroupplateService {
|
||||||
/**
|
/**
|
||||||
@@ -35,6 +37,7 @@ public class MdPbGroupplateServiceImpl extends ServiceImpl<MdPbGroupplateMapper,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IPage<JSONObject> queryAll(Map whereJson, PageQuery page) {
|
public IPage<JSONObject> queryAll(Map whereJson, PageQuery page) {
|
||||||
|
log.info("查询------");
|
||||||
return this.baseMapper.queryAllByPage(new Page<>(page.getPage() + 1, page.getSize()),
|
return this.baseMapper.queryAllByPage(new Page<>(page.getPage() + 1, page.getSize()),
|
||||||
whereJson);
|
whereJson);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<configuration scan="true" scanPeriod="30 seconds" debug="false">
|
<configuration scan="true" scanPeriod="30 seconds" debug="false">
|
||||||
|
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
|
||||||
<contextName>nlAdmin</contextName>
|
<contextName>nlAdmin</contextName>
|
||||||
<property name="log.charset" value="utf-8"/>
|
<property name="log.charset" value="utf-8"/>
|
||||||
<property name="log.pattern"
|
<property name="log.pattern"
|
||||||
@@ -22,25 +23,9 @@
|
|||||||
<!--日志文件输出的文件名-->
|
<!--日志文件输出的文件名-->
|
||||||
<FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
|
<FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
|
||||||
<!--日志文件保留天数-->
|
<!--日志文件保留天数-->
|
||||||
<maxHistory>10</maxHistory>
|
<maxHistory>30</maxHistory>
|
||||||
<!--单个日志最大容量 至少10MB才能看得出来-->
|
<!--单个日志最大容量 至少10MB才能看得出来-->
|
||||||
<maxFileSize>100MB</maxFileSize>
|
<maxFileSize>200MB</maxFileSize>
|
||||||
<!--所有日志最多占多大容量-->
|
|
||||||
<totalSizeCap>20GB</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>
|
|
||||||
</encoder>
|
|
||||||
</appender>
|
|
||||||
<appender name="ErpLogFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
|
||||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
|
||||||
<!--日志文件输出的文件名-->
|
|
||||||
<FileNamePattern>${LOG_HOME}/ErpLog/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
|
|
||||||
<!--日志文件保留天数-->
|
|
||||||
<maxHistory>7</maxHistory>
|
|
||||||
<!--单个日志最大容量 至少10MB才能看得出来-->
|
|
||||||
<maxFileSize>100MB</maxFileSize>
|
|
||||||
<!--所有日志最多占多大容量-->
|
<!--所有日志最多占多大容量-->
|
||||||
<totalSizeCap>20GB</totalSizeCap>
|
<totalSizeCap>20GB</totalSizeCap>
|
||||||
</rollingPolicy>
|
</rollingPolicy>
|
||||||
@@ -49,17 +34,33 @@
|
|||||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
<!-- <appender name="ErpLogFile" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
|
||||||
|
<!-- <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">-->
|
||||||
|
<!-- <!–日志文件输出的文件名–>-->
|
||||||
|
<!-- <FileNamePattern>${LOG_HOME}/ErpLog/%d{yyyy-MM-dd}.%i.log</FileNamePattern>-->
|
||||||
|
<!-- <!–日志文件保留天数–>-->
|
||||||
|
<!-- <maxHistory>7</maxHistory>-->
|
||||||
|
<!-- <!–单个日志最大容量 至少10MB才能看得出来–>-->
|
||||||
|
<!-- <maxFileSize>100MB</maxFileSize>-->
|
||||||
|
<!-- <!–所有日志最多占多大容量–>-->
|
||||||
|
<!-- <totalSizeCap>20GB</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>-->
|
||||||
|
<!-- </encoder>-->
|
||||||
|
<!-- </appender>-->
|
||||||
<!--异步到文件-->
|
<!--异步到文件-->
|
||||||
<appender name="asyncFileAppender" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
|
<appender name="asyncFileAppender" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
|
||||||
<discardingThreshold>2</discardingThreshold>
|
<discardingThreshold>2</discardingThreshold>
|
||||||
<queueSize>500</queueSize>
|
<queueSize>500</queueSize>
|
||||||
<appender-ref ref="FILE"/>
|
<appender-ref ref="FILE"/>
|
||||||
</appender>
|
</appender>
|
||||||
<appender name="asyncERPFileAppender" class="ch.qos.logback.classic.AsyncAppender">
|
<!-- <appender name="asyncERPFileAppender" class="ch.qos.logback.classic.AsyncAppender">-->
|
||||||
<discardingThreshold>2</discardingThreshold>
|
<!-- <discardingThreshold>2</discardingThreshold>-->
|
||||||
<queueSize>500</queueSize>
|
<!-- <queueSize>500</queueSize>-->
|
||||||
<appender-ref ref="ErpLogFile"/>
|
<!-- <appender-ref ref="ErpLogFile"/>-->
|
||||||
</appender>
|
<!-- </appender>-->
|
||||||
<appender name="luceneAppender" class="org.nl.config.lucene.LuceneAppender" >
|
<appender name="luceneAppender" class="org.nl.config.lucene.LuceneAppender" >
|
||||||
<!-- Filter for INFO level -->
|
<!-- Filter for INFO level -->
|
||||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||||
@@ -87,17 +88,14 @@
|
|||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
<!--开发环境:打印控制台-->
|
<!--开发环境:打印控制台-->
|
||||||
<springProfile name="prod">
|
<springProfile name="dev">
|
||||||
<root level="info">
|
<root level="info">
|
||||||
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
<appender-ref ref="asyncLuceneAppender"/>
|
<appender-ref ref="asyncLuceneAppender"/>
|
||||||
<appender-ref ref="CONSOLE"/>
|
|
||||||
</root>
|
</root>
|
||||||
<logger name="jdbc" level="ERROR" additivity="true">
|
<logger name="jdbc" level="ERROR" additivity="true">
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</logger>
|
</logger>
|
||||||
<logger name="org.nl.wms.system_manage.service.quartz.task" level="ERROR" additivity="true">
|
|
||||||
<appender-ref ref="asyncERPFileAppender"/>
|
|
||||||
</logger>
|
|
||||||
<logger name="org.springframework" level="ERROR" additivity="true">
|
<logger name="org.springframework" level="ERROR" additivity="true">
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</logger>
|
</logger>
|
||||||
@@ -121,7 +119,7 @@
|
|||||||
</logger>
|
</logger>
|
||||||
</springProfile>
|
</springProfile>
|
||||||
<!--测试环境:打印控制台-->
|
<!--测试环境:打印控制台-->
|
||||||
<springProfile name="dev">
|
<springProfile name="prod">
|
||||||
<root level="INFO">
|
<root level="INFO">
|
||||||
<appender-ref ref="asyncLuceneAppender"/>
|
<appender-ref ref="asyncLuceneAppender"/>
|
||||||
<appender-ref ref="CONSOLE"/>
|
<appender-ref ref="CONSOLE"/>
|
||||||
|
|||||||
@@ -140,12 +140,14 @@
|
|||||||
<el-select
|
<el-select
|
||||||
v-model="form.supp_code"
|
v-model="form.supp_code"
|
||||||
placeholder="请选择"
|
placeholder="请选择"
|
||||||
style="width: 200px;">
|
style="width: 200px;"
|
||||||
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in supplist"
|
v-for="item in supplist"
|
||||||
:key="item.supp_code"
|
:key="item.supp_code"
|
||||||
:label="item.supp_name"
|
:label="item.supp_name"
|
||||||
:value="item.supp_code">
|
:value="item.supp_code"
|
||||||
|
>
|
||||||
<span style="float: left">{{ item.supp_name }}</span>
|
<span style="float: left">{{ item.supp_name }}</span>
|
||||||
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.supp_code }}</span>
|
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.supp_code }}</span>
|
||||||
</el-option>
|
</el-option>
|
||||||
@@ -175,11 +177,6 @@
|
|||||||
<el-table-column prop="status" label="状态" :formatter="formattStatus" :min-width="flexWidth('status',crud.data,'状态')" />
|
<el-table-column prop="status" label="状态" :formatter="formattStatus" :min-width="flexWidth('status',crud.data,'状态')" />
|
||||||
<el-table-column prop="qty" label="可用数" :formatter="crud.formatNum3" :min-width="100" />
|
<el-table-column prop="qty" label="可用数" :formatter="crud.formatNum3" :min-width="100" />
|
||||||
<el-table-column prop="frozen_qty" label="冻结数" :formatter="crud.formatNum3" :min-width="100" />
|
<el-table-column prop="frozen_qty" label="冻结数" :formatter="crud.formatNum3" :min-width="100" />
|
||||||
<el-table-column label="总数" :formatter="crud.formatNum3" :min-width="100">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
{{ parseFloat(scope.row.qty + scope.row.frozen_qty).toFixed(3) }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" />
|
<el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" />
|
||||||
<el-table-column prop="create_name" label="组盘人" :min-width="flexWidth('create_name',crud.data,'组盘人')" />
|
<el-table-column prop="create_name" label="组盘人" :min-width="flexWidth('create_name',crud.data,'组盘人')" />
|
||||||
<el-table-column prop="create_time" label="组盘时间" :min-width="flexWidth('create_time',crud.data,'组盘时间')" />
|
<el-table-column prop="create_time" label="组盘时间" :min-width="flexWidth('create_time',crud.data,'组盘时间')" />
|
||||||
|
|||||||
Reference in New Issue
Block a user