解决死锁初版

This commit is contained in:
bo.wu@finesys.com.cn 2025-06-21 23:33:01 +08:00
parent db35603d0b
commit 892c582abe
14 changed files with 875 additions and 794 deletions

View File

@ -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);

View File

@ -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("更新物料信息发生异常");

View File

@ -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);

View File

@ -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);
} }

File diff suppressed because it is too large Load Diff

View File

@ -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("查询用户列表失败。");

View File

@ -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);

View File

@ -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,7 +453,10 @@ 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);
break; if(needNum.compareTo(BigDecimal.ZERO) == 0){
break;
}
// break;
} }
if (!waitForOutStockList.isEmpty()) { if (!waitForOutStockList.isEmpty()) {
// 创建任务 // 创建任务

View File

@ -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();
} }

View File

@ -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)) // .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) .map(Map.Entry::getKey)
.orElse(null); .findFirst();
if (mostEmptyStackerId == null) {
// 跳出循环 Integer selectedStackerId;
if (stackerWithOneTask.isPresent()) {
selectedStackerId = stackerWithOneTask.get();
} else {
// 第二步找当前任务最少的堆垛机
selectedStackerId = runningTaskNumToEquipmentMap.entrySet().stream()
.min(Comparator.comparingInt(Map.Entry::getValue))
.map(Map.Entry::getKey)
.orElse(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);
} }
// 选择最近未使用的设备 // 选择最近未使用的设备

View File

@ -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());
} }
} }
} }

View File

@ -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());
} }
} }
} }

View File

@ -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 {
} }

View File

@ -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>