Browse Source

真实数据

master
han\hanst 3 months ago
parent
commit
e21e437edb
  1. 67
      src/main/java/com/gaotao/modules/dashboard/dao/DashboardDao.java
  2. 192
      src/main/java/com/gaotao/modules/dashboard/task/DashboardPushTask.java
  3. 47
      src/main/resources/mapper/dashboard/DashboardDao.xml

67
src/main/java/com/gaotao/modules/dashboard/dao/DashboardDao.java

@ -37,6 +37,73 @@ public interface DashboardDao {
*/
List<Map<String, Object>> querySlittingInboundData();
/**
* 查询成品包装区数据
*
* <p><b>数据来源</b>view_board_finish_package</p>
* <p><b>返回字段</b></p>
* <ul>
* <li>storageLocation - 存放位置</li>
* <li>palletCode - 托盘码</li>
* <li>pickingLocation - 拣选位置</li>
* <li>materialName - 拣选物料名称</li>
* <li>quantity - 拣选数量</li>
* <li>status - 状态</li>
* </ul>
*
* @return 成品包装区实时数据
*/
List<Map<String, Object>> queryFinishPackageData();
/**
* 查询成品入库区数据
*
* <p><b>数据来源</b>view_board_finish_inbound</p>
* <p><b>返回字段</b></p>
* <ul>
* <li>storageLocation - 存放位置</li>
* <li>palletCode - 托盘码</li>
* <li>taskType - 任务分类</li>
* <li>status - 状态</li>
* </ul>
*
* @return 成品入库区实时数据
*/
List<Map<String, Object>> queryFinishInboundData();
/**
* 查询原材收货区数据
*
* <p><b>数据来源</b>view_board_receiving_receive</p>
* <p><b>返回字段</b></p>
* <ul>
* <li>arrivalTime - 到达时间</li>
* <li>materialName - 拣选物料名称</li>
* <li>quantity - 数量</li>
* <li>location - 库位</li>
* <li>status - 状态</li>
* </ul>
*
* @return 原材收货区实时数据
*/
List<Map<String, Object>> queryReceivingReceiveData();
/**
* 查询原材入库区数据
*
* <p><b>数据来源</b>view_board_receiving_inbound</p>
* <p><b>返回字段</b></p>
* <ul>
* <li>storageLocation - 存放位置</li>
* <li>palletCode - 托盘码</li>
* <li>taskType - 任务分类</li>
* <li>status - 状态</li>
* </ul>
*
* @return 原材入库区实时数据
*/
List<Map<String, Object>> queryReceivingInboundData();
// ==================== 智能立体仓库看板数据 ====================
/**

192
src/main/java/com/gaotao/modules/dashboard/task/DashboardPushTask.java

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

47
src/main/resources/mapper/dashboard/DashboardDao.xml

@ -27,6 +27,53 @@
ORDER BY storage_location ASC
</select>
<!-- 查询成品包装区数据 -->
<select id="queryFinishPackageData" resultType="map">
SELECT
storage_location AS storageLocation,
pallet_code AS palletCode,
picking_location AS pickingLocation,
material_name AS materialName,
quantity,
status
FROM view_board_finish_package
ORDER BY picking_location ASC
</select>
<!-- 查询成品入库区数据 -->
<select id="queryFinishInboundData" resultType="map">
SELECT
storage_location AS storageLocation,
pallet_code AS palletCode,
task_type AS taskType,
status
FROM view_board_finish_inbound
ORDER BY storage_location ASC
</select>
<!-- 查询原材收货区数据 -->
<select id="queryReceivingReceiveData" resultType="map">
SELECT
arrival_time AS arrivalTime,
material_name AS materialName,
quantity,
location,
status
FROM view_board_receiving_receive
ORDER BY arrival_time DESC
</select>
<!-- 查询原材入库区数据 -->
<select id="queryReceivingInboundData" resultType="map">
SELECT
storage_location AS storageLocation,
pallet_code AS palletCode,
task_type AS taskType,
status
FROM view_board_receiving_inbound
ORDER BY storage_location ASC
</select>
<!-- ==================== 智能立体仓库看板查询 ==================== -->
<!-- 查询立体仓库任务统计数据 -->

Loading…
Cancel
Save