解决死锁初版
This commit is contained in:
parent
db35603d0b
commit
892c582abe
|
|
@ -99,7 +99,8 @@ public class ExcelController {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 回滚事务
|
// 回滚事务
|
||||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||||
logger.error("查询上传记录发生异常:{}", convertJsonString(e));
|
e.printStackTrace();
|
||||||
|
logger.error("查询上传记录发生异常:{}", e.getMessage());
|
||||||
response.setCode(ResponseCode.ERROR.getCode());
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
response.setMessage("查询上传记录发生异常");
|
response.setMessage("查询上传记录发生异常");
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
|
|
|
||||||
|
|
@ -135,7 +135,8 @@ public class GoodsController {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 回滚事务
|
// 回滚事务
|
||||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||||
logger.error("更新物料信息发生异常:{}", convertJsonString(e));
|
e.printStackTrace();
|
||||||
|
logger.error("更新物料信息发生异常:{}", e.getMessage());
|
||||||
// 返回其他异常
|
// 返回其他异常
|
||||||
rsp.setCode(ResponseCode.ERROR.getCode());
|
rsp.setCode(ResponseCode.ERROR.getCode());
|
||||||
rsp.setMessage("更新物料信息发生异常");
|
rsp.setMessage("更新物料信息发生异常");
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,8 @@ public class KateWorkQueryController {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 回滚事务
|
// 回滚事务
|
||||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||||
logger.error("查询DBS发生异常:{}", convertJsonString(e));
|
e.printStackTrace();
|
||||||
|
logger.error("查询DBS发生异常:{}", e.getMessage());
|
||||||
response.setCode(ResponseCode.ERROR.getCode());
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
response.setMessage("查询DBS发生异常");
|
response.setMessage("查询DBS发生异常");
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@ import com.wms.entity.app.monitor.WorkInfoByStand;
|
||||||
import com.wms.entity.table.*;
|
import com.wms.entity.table.*;
|
||||||
import com.wms.service.*;
|
import com.wms.service.*;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.web.bind.annotation.CrossOrigin;
|
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||||
|
|
@ -31,6 +33,7 @@ import static com.wms.utils.StringUtils.convertJsonString;
|
||||||
@RequestMapping(value = "/monitor")
|
@RequestMapping(value = "/monitor")
|
||||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||||
public class MonitorController {
|
public class MonitorController {
|
||||||
|
private final static Logger logger = LoggerFactory.getLogger(MonitorController.class);
|
||||||
private final LocationService locationService;
|
private final LocationService locationService;
|
||||||
private final WorkFlowService workFlowService;
|
private final WorkFlowService workFlowService;
|
||||||
private final WorkSummaryService workSummaryService;
|
private final WorkSummaryService workSummaryService;
|
||||||
|
|
@ -68,7 +71,7 @@ public class MonitorController {
|
||||||
response.setEmpty(0);
|
response.setEmpty(0);
|
||||||
response.setEmptyUsed(0);
|
response.setEmptyUsed(0);
|
||||||
}
|
}
|
||||||
System.out.println("结束执行getLocationUseDetail方法:"+(System.currentTimeMillis()-l));
|
logger.info("结束执行getLocationUseDetail方法:{}",(System.currentTimeMillis()-l));
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -169,6 +169,12 @@ public class TaskController {
|
||||||
private final WorkSummaryService workSummaryService;
|
private final WorkSummaryService workSummaryService;
|
||||||
private final InventoryHistoryService inventoryHistoryService;
|
private final InventoryHistoryService inventoryHistoryService;
|
||||||
|
|
||||||
|
|
||||||
|
// 定义全局锁对象 为了电子标签反馈消息互斥
|
||||||
|
private static final Object GLOBAL_LOCK = new Object();
|
||||||
|
// private static final Object GLOBAL_REC_TASK_LOCK = new Object();
|
||||||
|
// private static final Object GLOBAL_CONFIRM_FINISH_LOCK = new Object();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 接收入库任务请求
|
* 接收入库任务请求
|
||||||
*
|
*
|
||||||
|
|
@ -304,7 +310,6 @@ public class TaskController {
|
||||||
logger.info("接收到任务反馈:{},ip地址:{}", convertJsonString(wcsTaskResultRequest), HttpUtils.getIpAddr(servletRequest));
|
logger.info("接收到任务反馈:{},ip地址:{}", convertJsonString(wcsTaskResultRequest), HttpUtils.getIpAddr(servletRequest));
|
||||||
// 创建响应信息
|
// 创建响应信息
|
||||||
ResponseEntity response = new ResponseEntity();
|
ResponseEntity response = new ResponseEntity();
|
||||||
try {
|
|
||||||
String validateInfo = validateService.validateTaskResult(wcsTaskResultRequest);
|
String validateInfo = validateService.validateTaskResult(wcsTaskResultRequest);
|
||||||
if (!Objects.equals(validateInfo, TaskResultValidationEnum.OK.getErrorMessage())) {
|
if (!Objects.equals(validateInfo, TaskResultValidationEnum.OK.getErrorMessage())) {
|
||||||
logger.error("任务反馈请求验证失败:{}", validateInfo);
|
logger.error("任务反馈请求验证失败:{}", validateInfo);
|
||||||
|
|
@ -313,6 +318,8 @@ public class TaskController {
|
||||||
response.setMessage("任务反馈请求验证失败:" + validateInfo);
|
response.setMessage("任务反馈请求验证失败:" + validateInfo);
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
}
|
}
|
||||||
|
synchronized (GLOBAL_LOCK) {
|
||||||
|
try {
|
||||||
// 解析任务号
|
// 解析任务号
|
||||||
List<Task> feedBackTasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskGroup, wcsTaskResultRequest.getTaskId()));
|
List<Task> feedBackTasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskGroup, wcsTaskResultRequest.getTaskId()));
|
||||||
// 任务状态
|
// 任务状态
|
||||||
|
|
@ -611,6 +618,7 @@ public class TaskController {
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wcs请求载具入库
|
* Wcs请求载具入库
|
||||||
|
|
@ -873,6 +881,7 @@ public class TaskController {
|
||||||
public String boxArrive(@RequestBody WcsBoxArriveRequest boxArriveRequest) {
|
public String boxArrive(@RequestBody WcsBoxArriveRequest boxArriveRequest) {
|
||||||
logger.info("接收到Wcs上报箱子到达:{},ip地址:{}", convertJsonString(boxArriveRequest), HttpUtils.getIpAddr(servletRequest));
|
logger.info("接收到Wcs上报箱子到达:{},ip地址:{}", convertJsonString(boxArriveRequest), HttpUtils.getIpAddr(servletRequest));
|
||||||
ResponseEntity response = new ResponseEntity();
|
ResponseEntity response = new ResponseEntity();
|
||||||
|
synchronized (GLOBAL_LOCK) {
|
||||||
try {
|
try {
|
||||||
// 校验请求参数
|
// 校验请求参数
|
||||||
String validateInfo = validateService.validateBoxArriveRequest(boxArriveRequest);
|
String validateInfo = validateService.validateBoxArriveRequest(boxArriveRequest);
|
||||||
|
|
@ -931,6 +940,7 @@ public class TaskController {
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据站台号以及料号获取工作信息给前台界面展示
|
* 根据站台号以及料号获取工作信息给前台界面展示
|
||||||
|
|
@ -1357,13 +1367,14 @@ public class TaskController {
|
||||||
public String getETaskFeedBack(@RequestBody WcsETaskFeedbackRequest eTaskFeedbackRequest) {
|
public String getETaskFeedBack(@RequestBody WcsETaskFeedbackRequest eTaskFeedbackRequest) {
|
||||||
logger.info("获取电子标签反馈:{},ip地址:{}", convertJsonString(eTaskFeedbackRequest), HttpUtils.getIpAddr(servletRequest));
|
logger.info("获取电子标签反馈:{},ip地址:{}", convertJsonString(eTaskFeedbackRequest), HttpUtils.getIpAddr(servletRequest));
|
||||||
ResponseEntity response = new ResponseEntity();
|
ResponseEntity response = new ResponseEntity();
|
||||||
try {
|
|
||||||
if (eTaskFeedbackRequest == null || StringUtils.isEmpty(eTaskFeedbackRequest.getTaskId()) || eTaskFeedbackRequest.getTaskType() == null) {
|
if (eTaskFeedbackRequest == null || StringUtils.isEmpty(eTaskFeedbackRequest.getTaskId()) || eTaskFeedbackRequest.getTaskType() == null) {
|
||||||
logger.error("请求参数补全,缺少任务号、任务类型。");
|
logger.error("请求参数补全,缺少任务号、任务类型。");
|
||||||
response.setCode(ResponseCode.ERROR.getCode());
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
response.setMessage("请求参数补全,缺少任务号、任务类型。");
|
response.setMessage("请求参数补全,缺少任务号、任务类型。");
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
}
|
}
|
||||||
|
synchronized (GLOBAL_LOCK) {
|
||||||
|
try {
|
||||||
if (eTaskFeedbackRequest.getTaskType() == 1) {// 拣选任务
|
if (eTaskFeedbackRequest.getTaskType() == 1) {// 拣选任务
|
||||||
// 查询到对应的库位,如果不是亮灯状态,不接受反馈
|
// 查询到对应的库位,如果不是亮灯状态,不接受反馈
|
||||||
if (!etagLocationService.exists(new LambdaQueryWrapper<ETagLocation>()
|
if (!etagLocationService.exists(new LambdaQueryWrapper<ETagLocation>()
|
||||||
|
|
@ -1482,8 +1493,8 @@ public class TaskController {
|
||||||
response.setCode(ResponseCode.OK.getCode());
|
response.setCode(ResponseCode.OK.getCode());
|
||||||
response.setMessage("处理反馈成功");
|
response.setMessage("处理反馈成功");
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 回滚事务
|
|
||||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||||
logger.error("处理反馈异常:{}", convertJsonString(e));
|
logger.error("处理反馈异常:{}", convertJsonString(e));
|
||||||
response.setCode(ResponseCode.ERROR.getCode());
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
|
|
@ -1492,6 +1503,8 @@ public class TaskController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 确认完成---wms界面触发
|
* 确认完成---wms界面触发
|
||||||
*
|
*
|
||||||
|
|
@ -1505,6 +1518,7 @@ public class TaskController {
|
||||||
public String confirmFinishWork(@RequestBody WorkConfirmRequest workConfirmRequest) {
|
public String confirmFinishWork(@RequestBody WorkConfirmRequest workConfirmRequest) {
|
||||||
logger.info("接收到确认当前拣货完成(wms界面触发)请求:{},ip地址:{}", convertJsonString(workConfirmRequest), HttpUtils.getIpAddr(servletRequest));
|
logger.info("接收到确认当前拣货完成(wms界面触发)请求:{},ip地址:{}", convertJsonString(workConfirmRequest), HttpUtils.getIpAddr(servletRequest));
|
||||||
ResponseEntity response = new ResponseEntity();
|
ResponseEntity response = new ResponseEntity();
|
||||||
|
synchronized (GLOBAL_LOCK) {
|
||||||
try {
|
try {
|
||||||
// 获取站台号
|
// 获取站台号
|
||||||
String standId = "";
|
String standId = "";
|
||||||
|
|
@ -1735,6 +1749,7 @@ public class TaskController {
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wcs请求释放箱子---站台实体按钮触发
|
* Wcs请求释放箱子---站台实体按钮触发
|
||||||
|
|
@ -2191,6 +2206,7 @@ public class TaskController {
|
||||||
public String requestBack(@RequestBody RequestBackQuery requestBackQuery) {
|
public String requestBack(@RequestBody RequestBackQuery requestBackQuery) {
|
||||||
logger.info("Wcs请求箱子是否回库:{},ip地址:{}", convertJsonString(requestBackQuery), HttpUtils.getIpAddr(servletRequest));
|
logger.info("Wcs请求箱子是否回库:{},ip地址:{}", convertJsonString(requestBackQuery), HttpUtils.getIpAddr(servletRequest));
|
||||||
ResponseEntity response = new ResponseEntity();
|
ResponseEntity response = new ResponseEntity();
|
||||||
|
synchronized (GLOBAL_LOCK) {
|
||||||
try {
|
try {
|
||||||
// 验证数量
|
// 验证数量
|
||||||
if (StringUtils.isEmpty(requestBackQuery.getVehicleId())) {
|
if (StringUtils.isEmpty(requestBackQuery.getVehicleId())) {
|
||||||
|
|
@ -2280,6 +2296,7 @@ public class TaskController {
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 请求打印标签的数据
|
* 请求打印标签的数据
|
||||||
|
|
|
||||||
|
|
@ -125,7 +125,8 @@ public class UserController {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 回滚事务
|
// 回滚事务
|
||||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||||
logger.info("数据库错误:{}", convertJsonString(e));
|
e.printStackTrace();
|
||||||
|
logger.error("数据库错误:{}", e.getMessage());
|
||||||
// 返回其他异常
|
// 返回其他异常
|
||||||
rsp.setCode(ResponseCode.ERROR.getCode());
|
rsp.setCode(ResponseCode.ERROR.getCode());
|
||||||
rsp.setMessage("登录异常");
|
rsp.setMessage("登录异常");
|
||||||
|
|
@ -175,7 +176,8 @@ public class UserController {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 回滚事务
|
// 回滚事务
|
||||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||||
logger.info("数据库错误:{}", convertJsonString(e));
|
e.printStackTrace();
|
||||||
|
logger.error("数据库错误:{}", e.getMessage());
|
||||||
// 返回其他异常
|
// 返回其他异常
|
||||||
rsp.setCode(ResponseCode.ERROR.getCode());
|
rsp.setCode(ResponseCode.ERROR.getCode());
|
||||||
rsp.setMessage("登录异常");
|
rsp.setMessage("登录异常");
|
||||||
|
|
@ -357,7 +359,8 @@ public class UserController {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 回滚事务
|
// 回滚事务
|
||||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||||
logger.info("查询用户列表失败:{}", convertJsonString(e));
|
e.printStackTrace();
|
||||||
|
logger.error("查询用户列表失败:{}", e.getMessage());
|
||||||
// 返回其他异常
|
// 返回其他异常
|
||||||
rsp.setCode(ResponseCode.ERROR.getCode());
|
rsp.setCode(ResponseCode.ERROR.getCode());
|
||||||
rsp.setMessage("查询用户列表失败。");
|
rsp.setMessage("查询用户列表失败。");
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,8 @@ public class WmsLogController {
|
||||||
response.setReturnData(pageDto);
|
response.setReturnData(pageDto);
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("查询日志信息发生异常:{}", convertJsonString(e));
|
e.printStackTrace();
|
||||||
|
logger.error("查询日志信息发生异常:{}", e.getMessage());
|
||||||
response.setCode(ResponseCode.ERROR.getCode());
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
response.setMessage("查询日志信息发生异常");
|
response.setMessage("查询日志信息发生异常");
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
|
|
|
||||||
|
|
@ -339,8 +339,8 @@ public class WmsTaskServiceImplements implements IWmsTaskService {
|
||||||
}
|
}
|
||||||
if (outsideVehicle.getRemainNum().compareTo(needNum) > 0) {
|
if (outsideVehicle.getRemainNum().compareTo(needNum) > 0) {
|
||||||
// 当前箱子剩余物料数量多于需求数量
|
// 当前箱子剩余物料数量多于需求数量
|
||||||
needNum = BigDecimal.ZERO;
|
|
||||||
outsideVehicle.setRemainNum(outsideVehicle.getRemainNum().subtract(needNum));
|
outsideVehicle.setRemainNum(outsideVehicle.getRemainNum().subtract(needNum));
|
||||||
|
needNum = BigDecimal.ZERO;
|
||||||
usedOutsideVehiclesList.add(outsideVehicle);
|
usedOutsideVehiclesList.add(outsideVehicle);
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -348,6 +348,9 @@ public class WmsTaskServiceImplements implements IWmsTaskService {
|
||||||
needNum = needNum.subtract(outsideVehicle.getRemainNum());
|
needNum = needNum.subtract(outsideVehicle.getRemainNum());
|
||||||
outsideVehicle.setRemainNum(BigDecimal.ZERO);
|
outsideVehicle.setRemainNum(BigDecimal.ZERO);
|
||||||
usedOutsideVehiclesList.add(outsideVehicle);
|
usedOutsideVehiclesList.add(outsideVehicle);
|
||||||
|
if(needNum.compareTo(BigDecimal.ZERO) == 0){
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -429,13 +432,16 @@ public class WmsTaskServiceImplements implements IWmsTaskService {
|
||||||
// 设备应该处于不可用状态,就不生成任务了
|
// 设备应该处于不可用状态,就不生成任务了
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (tempStock.getGoodsRelated().getRemainNum().compareTo(needNum) > 0) {
|
if (tempStock.getGoodsRelated().getRemainNum().compareTo(needNum) >= 0) {
|
||||||
// 当前箱子剩余物料数量多于需求数量
|
|
||||||
needNum = BigDecimal.ZERO;
|
|
||||||
// 设置剩余数量
|
// 设置剩余数量
|
||||||
StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
|
StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
|
||||||
goodsRelated.setRemainNum(goodsRelated.getRemainNum().subtract(needNum));
|
goodsRelated.setRemainNum(goodsRelated.getRemainNum().subtract(needNum));
|
||||||
|
|
||||||
tempStock.setGoodsRelated(goodsRelated);
|
tempStock.setGoodsRelated(goodsRelated);
|
||||||
|
// 当前箱子剩余物料数量多于需求数量
|
||||||
|
needNum = BigDecimal.ZERO;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// 当前箱子物料剩余数量少于需求数量
|
// 当前箱子物料剩余数量少于需求数量
|
||||||
needNum = needNum.subtract(tempStock.getGoodsRelated().getRemainNum());
|
needNum = needNum.subtract(tempStock.getGoodsRelated().getRemainNum());
|
||||||
|
|
@ -447,8 +453,11 @@ public class WmsTaskServiceImplements implements IWmsTaskService {
|
||||||
waitForOutStockList.add(tempStock);
|
waitForOutStockList.add(tempStock);
|
||||||
// 将堆垛机任务数量更新
|
// 将堆垛机任务数量更新
|
||||||
runningTaskNumToEquipmentMap.put(equipmentId, runningTaskNumToEquipmentMap.get(equipmentId) + 1);
|
runningTaskNumToEquipmentMap.put(equipmentId, runningTaskNumToEquipmentMap.get(equipmentId) + 1);
|
||||||
|
if(needNum.compareTo(BigDecimal.ZERO) == 0){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
// break;
|
||||||
|
}
|
||||||
if (!waitForOutStockList.isEmpty()) {
|
if (!waitForOutStockList.isEmpty()) {
|
||||||
// 创建任务
|
// 创建任务
|
||||||
createVehicleOutTaskAndPickTask(waitForOutStockList, workStation);
|
createVehicleOutTaskAndPickTask(waitForOutStockList, workStation);
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,6 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Isolation;
|
|
||||||
import org.springframework.transaction.annotation.Propagation;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
||||||
|
|
||||||
|
|
@ -28,7 +26,6 @@ import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.wms.config.InitLocalConfig.*;
|
import static com.wms.config.InitLocalConfig.*;
|
||||||
import static com.wms.constants.WmsConstants.MYSQL_JSON_CI;
|
import static com.wms.constants.WmsConstants.MYSQL_JSON_CI;
|
||||||
import static com.wms.utils.StringUtils.convertJsonString;
|
|
||||||
import static com.wms.utils.WmsUtils.generateId;
|
import static com.wms.utils.WmsUtils.generateId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -84,7 +81,7 @@ public class WorkServiceImplements implements IWorkService {
|
||||||
* @param workStation 工作站台
|
* @param workStation 工作站台
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void doWork(String workStation) {
|
public void doWork(String workStation) {
|
||||||
try {
|
try {
|
||||||
// 查找当前站台未开始的工作流
|
// 查找当前站台未开始的工作流
|
||||||
|
|
@ -233,7 +230,7 @@ public class WorkServiceImplements implements IWorkService {
|
||||||
goodsToStation.setDistributeStatus(2);
|
goodsToStation.setDistributeStatus(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 更新已分配数量
|
// 更新已分配数量 todo
|
||||||
goodsToStation.setDistributedNum(goodsToStation.getTotalNum().subtract(needNum));
|
goodsToStation.setDistributedNum(goodsToStation.getTotalNum().subtract(needNum));
|
||||||
}
|
}
|
||||||
goodsToStationService.updateBatchById(notFinishedGoodsList);
|
goodsToStationService.updateBatchById(notFinishedGoodsList);
|
||||||
|
|
@ -254,7 +251,8 @@ public class WorkServiceImplements implements IWorkService {
|
||||||
.in(KateOrders::getSupplyArea, smallBoxes)
|
.in(KateOrders::getSupplyArea, smallBoxes)
|
||||||
.eq(KateOrders::getOrderStatus, 1));
|
.eq(KateOrders::getOrderStatus, 1));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("执行站台:{}工作发生异常:{}", workStation, convertJsonString(e));
|
e.printStackTrace();
|
||||||
|
logger.error("执行站台:{}工作发生异常:{}", workStation, e.getMessage());
|
||||||
// 回滚事务
|
// 回滚事务
|
||||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||||
}
|
}
|
||||||
|
|
@ -350,7 +348,10 @@ public class WorkServiceImplements implements IWorkService {
|
||||||
.eq(KateDBS::getWorkOrder, workFlow.getOrderId()));
|
.eq(KateDBS::getWorkOrder, workFlow.getOrderId()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
workSummaryService.saveBatch(workSummaryList);
|
//解决workSummary的主键冲突问题 去掉workSummaryListlist中对象WorkFlowId重复的对象
|
||||||
|
workSummaryList = workSummaryList.stream().collect(Collectors.toMap(WorkSummary::getWorkFlowId, a -> a, (k1, k2) -> k1)).values().stream().collect(Collectors.toList());
|
||||||
|
|
||||||
|
workSummaryService.saveOrUpdateBatch(workSummaryList);
|
||||||
// 移除工作流
|
// 移除工作流
|
||||||
workFlowService.remove(new LambdaQueryWrapper<WorkFlow>()
|
workFlowService.remove(new LambdaQueryWrapper<WorkFlow>()
|
||||||
.eq(WorkFlow::getWorkStation, workStation));
|
.eq(WorkFlow::getWorkStation, workStation));
|
||||||
|
|
@ -358,7 +359,7 @@ public class WorkServiceImplements implements IWorkService {
|
||||||
goodsToStationService.remove(new LambdaQueryWrapper<GoodsToStation>()
|
goodsToStationService.remove(new LambdaQueryWrapper<GoodsToStation>()
|
||||||
.eq(GoodsToStation::getWorkStation, workStation));
|
.eq(GoodsToStation::getWorkStation, workStation));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("完成站台:{}工作发生异常:{}", workStation, convertJsonString(e));
|
logger.error("完成站台:{},工作发生异常:{}", workStation, e.getMessage());
|
||||||
result = "完成站台:" + workStation + "工作发生异常!";
|
result = "完成站台:" + workStation + "工作发生异常!";
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|
@ -444,7 +445,7 @@ public class WorkServiceImplements implements IWorkService {
|
||||||
}
|
}
|
||||||
tasksOfTodayMap.put(workConfig.getSmallBox(), toDaysOrders);
|
tasksOfTodayMap.put(workConfig.getSmallBox(), toDaysOrders);
|
||||||
}
|
}
|
||||||
// 判断是否有今天开工的工单和小工位
|
// 生成今天开工的工单和小工位
|
||||||
if (!tasksOfTodayMap.isEmpty()) {
|
if (!tasksOfTodayMap.isEmpty()) {
|
||||||
for (String smallBoxKey : tasksOfTodayMap.keySet()) {
|
for (String smallBoxKey : tasksOfTodayMap.keySet()) {
|
||||||
List<WorkCenterAndOrderDto> currentWorkCenterAndOrderDtoList = tasksOfTodayMap.get(smallBoxKey).stream().sorted(Comparator.comparingInt(WorkCenterAndOrderDto::getDbsSequence)).toList();
|
List<WorkCenterAndOrderDto> currentWorkCenterAndOrderDtoList = tasksOfTodayMap.get(smallBoxKey).stream().sorted(Comparator.comparingInt(WorkCenterAndOrderDto::getDbsSequence)).toList();
|
||||||
|
|
@ -653,10 +654,10 @@ public class WorkServiceImplements implements IWorkService {
|
||||||
.in(KateDBS::getWorkOrder, workOrderList)
|
.in(KateDBS::getWorkOrder, workOrderList)
|
||||||
.eq(KateDBS::getDbsStatus, 0));
|
.eq(KateDBS::getDbsStatus, 0));
|
||||||
}
|
}
|
||||||
System.out.println("createTempWorkFlows 成功");
|
logger.info("createTempWorkFlows 成功");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
System.out.println("createTempWorkFlows 为空");
|
logger.info("createTempWorkFlows 为空");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -768,14 +769,9 @@ public class WorkServiceImplements implements IWorkService {
|
||||||
Map<String, String> smallBoxToBigBoxConfigMap = workStationConfigs.stream().collect(Collectors.toMap(WorkStationConfig::getSmallBox, WorkStationConfig::getBigBox));
|
Map<String, String> smallBoxToBigBoxConfigMap = workStationConfigs.stream().collect(Collectors.toMap(WorkStationConfig::getSmallBox, WorkStationConfig::getBigBox));
|
||||||
for (WorkFlow workFlow : needDistributeWorks) {
|
for (WorkFlow workFlow : needDistributeWorks) {
|
||||||
if (smallBoxToBigBoxConfigMap.containsKey(workFlow.getWorkCenter())) {
|
if (smallBoxToBigBoxConfigMap.containsKey(workFlow.getWorkCenter())) {
|
||||||
if (workFlowsByBigBoxMap.containsKey(smallBoxToBigBoxConfigMap.get(workFlow.getWorkCenter()))) {
|
String bigbox = smallBoxToBigBoxConfigMap.get(workFlow.getWorkCenter());
|
||||||
String bigBox = smallBoxToBigBoxConfigMap.get(workFlow.getWorkCenter());
|
workFlowsByBigBoxMap.computeIfAbsent(bigbox, k -> new ArrayList<>())
|
||||||
List<WorkFlow> thisBoxWorkFlows = new ArrayList<>(workFlowsByBigBoxMap.get(bigBox));
|
.add(workFlow);
|
||||||
thisBoxWorkFlows.add(workFlow);
|
|
||||||
workFlowsByBigBoxMap.replace(bigBox, thisBoxWorkFlows);
|
|
||||||
} else {
|
|
||||||
workFlowsByBigBoxMap.put(smallBoxToBigBoxConfigMap.get(workFlow.getWorkCenter()), List.of(workFlow));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 生成每个大盒子的物料种类map
|
// 生成每个大盒子的物料种类map
|
||||||
|
|
@ -832,13 +828,15 @@ public class WorkServiceImplements implements IWorkService {
|
||||||
Map<String, List<WorkFlow>> notDistributeYetWorksByBoxMap = new HashMap<>();
|
Map<String, List<WorkFlow>> notDistributeYetWorksByBoxMap = new HashMap<>();
|
||||||
for (WorkFlow workFlow : thisBoxWorkFlows) {
|
for (WorkFlow workFlow : thisBoxWorkFlows) {
|
||||||
String boxNo = workFlow.getWorkOrder() + "@" + workFlow.getWorkCenter();
|
String boxNo = workFlow.getWorkOrder() + "@" + workFlow.getWorkCenter();
|
||||||
if (notDistributeYetWorksByBoxMap.containsKey(boxNo)) {
|
notDistributeYetWorksByBoxMap.computeIfAbsent(boxNo, k -> new ArrayList<>())
|
||||||
List<WorkFlow> thisBoxNotDistributeYetWorks = new ArrayList<>(notDistributeYetWorksByBoxMap.get(boxNo));
|
.add(workFlow);
|
||||||
thisBoxNotDistributeYetWorks.add(workFlow);
|
// if (notDistributeYetWorksByBoxMap.containsKey(boxNo)) {
|
||||||
notDistributeYetWorksByBoxMap.replace(boxNo, thisBoxNotDistributeYetWorks);
|
// List<WorkFlow> thisBoxNotDistributeYetWorks = new ArrayList<>(notDistributeYetWorksByBoxMap.get(boxNo));
|
||||||
} else {
|
// thisBoxNotDistributeYetWorks.add(workFlow);
|
||||||
notDistributeYetWorksByBoxMap.put(boxNo, List.of(workFlow));
|
// notDistributeYetWorksByBoxMap.replace(boxNo, thisBoxNotDistributeYetWorks);
|
||||||
}
|
// } else {
|
||||||
|
// notDistributeYetWorksByBoxMap.put(boxNo, List.of(workFlow));
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
if (notDistributeYetWorksByBoxMap.isEmpty()) {
|
if (notDistributeYetWorksByBoxMap.isEmpty()) {
|
||||||
// 当前大盒子全部分配完毕
|
// 当前大盒子全部分配完毕
|
||||||
|
|
@ -865,9 +863,15 @@ public class WorkServiceImplements implements IWorkService {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// 排序后的key
|
// 排序后的key
|
||||||
|
// List<String> sortedKeyString = notDistributeYetWorksByBoxMap.keySet().stream()
|
||||||
|
// .sorted(Comparator.comparing(o -> workOrderToSequenceMap.get(o.split("@")[0])))
|
||||||
|
// .sorted(Comparator.comparing(o -> o.split("@")[1]))
|
||||||
|
// .toList();
|
||||||
List<String> sortedKeyString = notDistributeYetWorksByBoxMap.keySet().stream()
|
List<String> sortedKeyString = notDistributeYetWorksByBoxMap.keySet().stream()
|
||||||
.sorted(Comparator.comparing(o -> workOrderToSequenceMap.get(o.split("@")[0])))
|
.sorted(
|
||||||
.sorted(Comparator.comparing(o -> o.split("@")[1]))
|
Comparator.comparing((String o) -> workOrderToSequenceMap.get(o.split("@")[0]))
|
||||||
|
.thenComparing(o -> o.split("@")[1])
|
||||||
|
)
|
||||||
.toList();
|
.toList();
|
||||||
// 本次生成的电子标签配置
|
// 本次生成的电子标签配置
|
||||||
List<ELocationConfig> thisStandELocationConfigs = stationToELocationConfigsMap.getOrDefault(targetStandId, new ArrayList<>());
|
List<ELocationConfig> thisStandELocationConfigs = stationToELocationConfigsMap.getOrDefault(targetStandId, new ArrayList<>());
|
||||||
|
|
@ -953,7 +957,8 @@ public class WorkServiceImplements implements IWorkService {
|
||||||
}
|
}
|
||||||
logger.info("分配工作完成");
|
logger.info("分配工作完成");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("分配工作发生异常:{}", convertJsonString(e));
|
e.printStackTrace();
|
||||||
|
logger.error("分配工作发生异常:{}", e.getMessage());
|
||||||
// 回滚事务
|
// 回滚事务
|
||||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -101,19 +101,49 @@ public class LocationServiceImplements extends ServiceImpl<LocationMapper, Locat
|
||||||
}
|
}
|
||||||
// 查找库位
|
// 查找库位
|
||||||
while (!runningTaskNumToEquipmentMap.isEmpty()) {
|
while (!runningTaskNumToEquipmentMap.isEmpty()) {
|
||||||
Integer mostEmptyStackerId = runningTaskNumToEquipmentMap.entrySet().stream()
|
// Integer mostEmptyStackerId = runningTaskNumToEquipmentMap.entrySet().stream()
|
||||||
|
// .min(Comparator.comparingInt(Map.Entry::getValue))
|
||||||
|
// .map(Map.Entry::getKey)
|
||||||
|
// .orElse(null);
|
||||||
|
// if (mostEmptyStackerId == null) {
|
||||||
|
// // 跳出循环
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// getOneLocationByEquipmentId(resultMap, mostEmptyStackerId, vehicleId);
|
||||||
|
// if (!resultMap.isEmpty()) {
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// runningTaskNumToEquipmentMap.remove(mostEmptyStackerId);
|
||||||
|
//为了实现堆垛机满载运行回库,更改堆垛机任务等于1时的逻辑
|
||||||
|
// 第一步:尝试给已有一个任务的堆垛机再分配一个任务
|
||||||
|
Optional<Integer> stackerWithOneTask = runningTaskNumToEquipmentMap.entrySet().stream()
|
||||||
|
.filter(entry -> entry.getValue() == 1)
|
||||||
|
.map(Map.Entry::getKey)
|
||||||
|
.findFirst();
|
||||||
|
|
||||||
|
Integer selectedStackerId;
|
||||||
|
|
||||||
|
if (stackerWithOneTask.isPresent()) {
|
||||||
|
selectedStackerId = stackerWithOneTask.get();
|
||||||
|
} else {
|
||||||
|
// 第二步:找当前任务最少的堆垛机
|
||||||
|
selectedStackerId = runningTaskNumToEquipmentMap.entrySet().stream()
|
||||||
.min(Comparator.comparingInt(Map.Entry::getValue))
|
.min(Comparator.comparingInt(Map.Entry::getValue))
|
||||||
.map(Map.Entry::getKey)
|
.map(Map.Entry::getKey)
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
if (mostEmptyStackerId == null) {
|
}
|
||||||
// 跳出循环
|
|
||||||
|
if (selectedStackerId == null) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
getOneLocationByEquipmentId(resultMap, mostEmptyStackerId, vehicleId);
|
|
||||||
|
getOneLocationByEquipmentId(resultMap, selectedStackerId, vehicleId);
|
||||||
if (!resultMap.isEmpty()) {
|
if (!resultMap.isEmpty()) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
runningTaskNumToEquipmentMap.remove(mostEmptyStackerId);
|
|
||||||
|
// 分配失败就移除该堆垛机,避免死循环
|
||||||
|
runningTaskNumToEquipmentMap.remove(selectedStackerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 选择最近未使用的设备
|
// 选择最近未使用的设备
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@ import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import com.wms.entity.app.dto.extend.KanbanEntity;
|
import com.wms.entity.app.dto.extend.KanbanEntity;
|
||||||
import com.wms.utils.StringUtils;
|
import com.wms.utils.StringUtils;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
@ -14,6 +16,7 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class KanbanExcelVo {
|
public class KanbanExcelVo {
|
||||||
|
private final static Logger log = LoggerFactory.getLogger(KanbanExcelVo.class);
|
||||||
@ExcelProperty("KANBAN#1")
|
@ExcelProperty("KANBAN#1")
|
||||||
private String KANBAN1;
|
private String KANBAN1;
|
||||||
@ExcelProperty("KANBAN#2")
|
@ExcelProperty("KANBAN#2")
|
||||||
|
|
@ -137,7 +140,7 @@ public class KanbanExcelVo {
|
||||||
}
|
}
|
||||||
} catch (IllegalAccessException e) {
|
} catch (IllegalAccessException e) {
|
||||||
// 捕捉异常
|
// 捕捉异常
|
||||||
System.out.println("设置看板发生异常:" + e.getMessage());
|
log.info("设置看板发生异常:{}" , e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -160,7 +163,7 @@ public class KanbanExcelVo {
|
||||||
}
|
}
|
||||||
} catch (IllegalAccessException e) {
|
} catch (IllegalAccessException e) {
|
||||||
// 捕捉异常
|
// 捕捉异常
|
||||||
System.out.println("转化看板数据配置时发生异常:" + e.getMessage());
|
log.info("转化看板数据配置时发生异常:{}" ,e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@ import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import com.wms.entity.app.dto.extend.KanbanEntity;
|
import com.wms.entity.app.dto.extend.KanbanEntity;
|
||||||
import com.wms.utils.StringUtils;
|
import com.wms.utils.StringUtils;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
@ -15,6 +17,7 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class KanbanGoodsExcelVo {
|
public class KanbanGoodsExcelVo {
|
||||||
|
private final static Logger logger = LoggerFactory.getLogger(KanbanGoodsExcelVo.class);
|
||||||
/**
|
/**
|
||||||
* 料号
|
* 料号
|
||||||
*/
|
*/
|
||||||
|
|
@ -318,7 +321,7 @@ public class KanbanGoodsExcelVo {
|
||||||
}
|
}
|
||||||
} catch (IllegalAccessException e) {
|
} catch (IllegalAccessException e) {
|
||||||
// 捕捉异常
|
// 捕捉异常
|
||||||
System.out.println("设置看板发生异常:" + e.getMessage());
|
logger.info("设置看板发生异常:{}" ,e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -341,7 +344,7 @@ public class KanbanGoodsExcelVo {
|
||||||
}
|
}
|
||||||
} catch (IllegalAccessException e) {
|
} catch (IllegalAccessException e) {
|
||||||
// 捕捉异常
|
// 捕捉异常
|
||||||
System.out.println("转化看板数据配置时发生异常:" + e.getMessage());
|
logger.info("转化看板数据配置时发生异常:{}" , e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import org.springframework.stereotype.Component;
|
||||||
/**
|
/**
|
||||||
* ws服务
|
* ws服务
|
||||||
*/
|
*/
|
||||||
@ServerEndpoint(value = "/websocket/{userName}")
|
//@ServerEndpoint(value = "/websocket/{userName}")
|
||||||
@Component
|
//@Component
|
||||||
public class WebSocketService {
|
public class WebSocketService {
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,8 @@
|
||||||
</rollingPolicy>
|
</rollingPolicy>
|
||||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||||
<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>-->
|
||||||
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%line - %msg%n</pattern>
|
||||||
</encoder>
|
</encoder>
|
||||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||||
<level>INFO</level>
|
<level>INFO</level>
|
||||||
|
|
@ -38,7 +39,8 @@
|
||||||
</rollingPolicy>
|
</rollingPolicy>
|
||||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||||
<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>-->
|
||||||
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%line - %msg%n</pattern>
|
||||||
</encoder>
|
</encoder>
|
||||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||||
<level>WARNING</level>
|
<level>WARNING</level>
|
||||||
|
|
@ -56,7 +58,8 @@
|
||||||
</rollingPolicy>
|
</rollingPolicy>
|
||||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||||
<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>-->
|
||||||
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%line - %msg%n</pattern>
|
||||||
</encoder>
|
</encoder>
|
||||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||||
<level>ERROR</level>
|
<level>ERROR</level>
|
||||||
|
|
@ -74,7 +77,8 @@
|
||||||
</rollingPolicy>
|
</rollingPolicy>
|
||||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||||
<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>-->
|
||||||
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%line - %msg%n</pattern>
|
||||||
</encoder>
|
</encoder>
|
||||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||||
<level>DEBUG</level>
|
<level>DEBUG</level>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user