|
|
|
@ -600,5 +600,197 @@ public class DashboardPushTask { |
|
|
|
|
|
|
|
return "未知状态"; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 每5秒检查成品入库出库区看板数据并推送 |
|
|
|
* |
|
|
|
* <p><b>数据来源:</b></p> |
|
|
|
* <ul> |
|
|
|
* <li>view_board_finish_package - 成品包装区数据</li> |
|
|
|
* <li>view_board_finish_inbound - 成品入库区数据</li> |
|
|
|
* </ul> |
|
|
|
*/ |
|
|
|
@Scheduled(fixedRate = 5000) |
|
|
|
public void pushFinishedProductBoardData() { |
|
|
|
try { |
|
|
|
// 从数据库视图获取成品区数据 |
|
|
|
Map<String, Object> data = getFinishedProductBoardDataFromDb(); |
|
|
|
|
|
|
|
// 如果返回null,转换为空数据 |
|
|
|
if (data == null) { |
|
|
|
data = createEmptyFinishedProductData(); |
|
|
|
} |
|
|
|
|
|
|
|
// 计算数据哈希值 |
|
|
|
int currentHash = data.hashCode(); |
|
|
|
webSocketService.pushFinishedProductBoardData(data); |
|
|
|
lastDataHash.put("finished-product", currentHash); |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
log.error("推送成品入库出库区看板数据失败,推送空数据清空前端列表: {}", e.getMessage(), e); |
|
|
|
// 异常时推送空数据,避免前端显示过期数据 |
|
|
|
try { |
|
|
|
Map<String, Object> emptyData = createEmptyFinishedProductData(); |
|
|
|
webSocketService.pushFinishedProductBoardData(emptyData); |
|
|
|
lastDataHash.put("finished-product", emptyData.hashCode()); |
|
|
|
} catch (Exception ex) { |
|
|
|
log.error("推送空数据失败: {}", ex.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 从数据库视图获取成品入库出库区看板数据 |
|
|
|
* |
|
|
|
* @return 成品入库出库区看板数据 |
|
|
|
*/ |
|
|
|
private Map<String, Object> getFinishedProductBoardDataFromDb() { |
|
|
|
try { |
|
|
|
// 查询成品包装区数据 |
|
|
|
List<Map<String, Object>> packageList = dashboardDao.queryFinishPackageData(); |
|
|
|
log.debug("查询到成品包装区数据: {}条", packageList != null ? packageList.size() : 0); |
|
|
|
|
|
|
|
// 查询成品入库区数据 |
|
|
|
List<Map<String, Object>> inboundList = dashboardDao.queryFinishInboundData(); |
|
|
|
log.debug("查询到成品入库区数据: {}条", inboundList != null ? inboundList.size() : 0); |
|
|
|
|
|
|
|
// 构造返回数据 |
|
|
|
Map<String, Object> resultData = new HashMap<>(); |
|
|
|
resultData.put("packagingList", packageList != null ? packageList : new ArrayList<>()); |
|
|
|
resultData.put("inboundList", inboundList != null ? inboundList : new ArrayList<>()); |
|
|
|
|
|
|
|
return resultData; |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
log.error("从数据库获取成品入库出库区看板数据失败: {}", e.getMessage(), e); |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 创建空的成品入库出库区数据 |
|
|
|
* |
|
|
|
* @return 空的成品入库出库区数据结构 |
|
|
|
*/ |
|
|
|
private Map<String, Object> createEmptyFinishedProductData() { |
|
|
|
Map<String, Object> emptyData = new HashMap<>(); |
|
|
|
emptyData.put("packagingList", new ArrayList<>()); |
|
|
|
emptyData.put("inboundList", new ArrayList<>()); |
|
|
|
return emptyData; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 判断成品入库出库区数据是否为空 |
|
|
|
* |
|
|
|
* @param data 待检查的数据 |
|
|
|
* @return true=数据为空,false=数据不为空 |
|
|
|
*/ |
|
|
|
private boolean isFinishedProductDataEmpty(Map<String, Object> data) { |
|
|
|
if (data == null || data.isEmpty()) { |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
List<?> packageList = (List<?>) data.get("packagingList"); |
|
|
|
List<?> inboundList = (List<?>) data.get("inboundList"); |
|
|
|
|
|
|
|
return (packageList == null || packageList.isEmpty()) |
|
|
|
&& (inboundList == null || inboundList.isEmpty()); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 每5秒检查原材收货区看板数据并推送 |
|
|
|
* |
|
|
|
* <p><b>数据来源:</b></p> |
|
|
|
* <ul> |
|
|
|
* <li>view_board_receiving_receive - 原材收货区数据</li> |
|
|
|
* <li>view_board_receiving_inbound - 原材入库区数据</li> |
|
|
|
* </ul> |
|
|
|
*/ |
|
|
|
@Scheduled(fixedRate = 5000) |
|
|
|
public void pushMaterialReceivingBoardData() { |
|
|
|
try { |
|
|
|
// 从数据库视图获取原材收货区数据 |
|
|
|
Map<String, Object> data = getMaterialReceivingBoardDataFromDb(); |
|
|
|
|
|
|
|
// 如果返回null,转换为空数据 |
|
|
|
if (data == null) { |
|
|
|
data = createEmptyMaterialReceivingData(); |
|
|
|
} |
|
|
|
|
|
|
|
// 计算数据哈希值 |
|
|
|
int currentHash = data.hashCode(); |
|
|
|
webSocketService.pushMaterialReceivingBoardData(data); |
|
|
|
lastDataHash.put("material-receiving", currentHash); |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
log.error("推送原材收货区看板数据失败,推送空数据清空前端列表: {}", e.getMessage(), e); |
|
|
|
// 异常时推送空数据,避免前端显示过期数据 |
|
|
|
try { |
|
|
|
Map<String, Object> emptyData = createEmptyMaterialReceivingData(); |
|
|
|
webSocketService.pushMaterialReceivingBoardData(emptyData); |
|
|
|
lastDataHash.put("material-receiving", emptyData.hashCode()); |
|
|
|
} catch (Exception ex) { |
|
|
|
log.error("推送空数据失败: {}", ex.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 从数据库视图获取原材收货区看板数据 |
|
|
|
* |
|
|
|
* @return 原材收货区看板数据 |
|
|
|
*/ |
|
|
|
private Map<String, Object> getMaterialReceivingBoardDataFromDb() { |
|
|
|
try { |
|
|
|
// 查询原材收货区数据 |
|
|
|
List<Map<String, Object>> receiveList = dashboardDao.queryReceivingReceiveData(); |
|
|
|
log.debug("查询到原材收货区数据: {}条", receiveList != null ? receiveList.size() : 0); |
|
|
|
|
|
|
|
// 查询原材入库区数据 |
|
|
|
List<Map<String, Object>> inboundList = dashboardDao.queryReceivingInboundData(); |
|
|
|
log.debug("查询到原材入库区数据: {}条", inboundList != null ? inboundList.size() : 0); |
|
|
|
|
|
|
|
// 构造返回数据 |
|
|
|
Map<String, Object> resultData = new HashMap<>(); |
|
|
|
resultData.put("receivingList", receiveList != null ? receiveList : new ArrayList<>()); |
|
|
|
resultData.put("inboundList", inboundList != null ? inboundList : new ArrayList<>()); |
|
|
|
|
|
|
|
return resultData; |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
log.error("从数据库获取原材收货区看板数据失败: {}", e.getMessage(), e); |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 创建空的原材收货区数据 |
|
|
|
* |
|
|
|
* @return 空的原材收货区数据结构 |
|
|
|
*/ |
|
|
|
private Map<String, Object> createEmptyMaterialReceivingData() { |
|
|
|
Map<String, Object> emptyData = new HashMap<>(); |
|
|
|
emptyData.put("receivingList", new ArrayList<>()); |
|
|
|
emptyData.put("inboundList", new ArrayList<>()); |
|
|
|
return emptyData; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 判断原材收货区数据是否为空 |
|
|
|
* |
|
|
|
* @param data 待检查的数据 |
|
|
|
* @return true=数据为空,false=数据不为空 |
|
|
|
*/ |
|
|
|
private boolean isMaterialReceivingDataEmpty(Map<String, Object> data) { |
|
|
|
if (data == null || data.isEmpty()) { |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
List<?> receiveList = (List<?>) data.get("receivingList"); |
|
|
|
List<?> inboundList = (List<?>) data.get("inboundList"); |
|
|
|
|
|
|
|
return (receiveList == null || receiveList.isEmpty()) |
|
|
|
&& (inboundList == null || inboundList.isEmpty()); |
|
|
|
} |
|
|
|
} |
|
|
|
|