Browse Source

看板数据

master
han\hanst 4 months ago
parent
commit
c173c26da3
  1. 81
      src/main/java/com/gaotao/modules/dashboard/dao/DashboardDao.java
  2. 15
      src/main/java/com/gaotao/modules/dashboard/task/DashboardPushTask.java
  3. 247
      src/main/resources/mapper/dashboard/DashboardDao.xml

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

@ -56,83 +56,52 @@ public interface DashboardDao {
*/
Map<String, Object> queryWarehouseTaskStats();
/**
* 查询立体仓库库位利用率数据
*
* <p><b>数据说明</b></p>
* <ul>
* <li>totalSlots - 总库位数</li>
* <li>usedSlots - 已使用库位数</li>
* <li>utilizationRate - 利用率百分比</li>
* <li>steelPallet - 钢制托盘数量</li>
* <li>guardPallet - 护边托盘数量</li>
* <li>flatPallet - 平托盘数量</li>
* </ul>
*
* @return 库位利用率数据
*/
Map<String, Object> queryWarehouseStorageUtilization();
// ==================== 库存趋势统计 ====================
/**
* 查询立体仓库机器人状态数据
* 查询原材料库存量趋势当月每日数据
*
* <p><b>数据说明</b></p>
* <p><b>物料判断规则</b>料号不以378开头</p>
*
* <p><b>返回数据结构</b></p>
* <ul>
* <li>id - 机器人ID</li>
* <li>name - 机器人名称</li>
* <li>status - 状态working/idle/charging/error</li>
* <li>statusText - 状态文本</li>
* <li>efficiency - 效率百分比</li>
* <li>tasks - 当前任务数</li>
* <li>dayNum - 日期1-31</li>
* <li>quantity - 库存数量</li>
* </ul>
*
* @return 机器人状态列表
* @return 原材料库存趋势列表
*/
List<Map<String, Object>> queryWarehouseRobotStatus();
List<Map<String, Object>> queryRawMaterialInventoryTrend();
/**
* 查询立体仓库AGV状态数据
*
* <p><b>注意此方法已废弃</b></p>
* <p>AGV状态数据不从数据库查询而是从TUSK系统实时获取</p>
* <p>请使用 DashboardPushTask.getAgvStatusFromTusk() 方法获取AGV状态</p>
* 查询规格料库存量趋势当月每日数据
*
* @deprecated 使用 TuskClientService.getOnlineRobots() 代替
* @return AGV状态列表空列表
*/
@Deprecated
List<Map<String, Object>> queryWarehouseAgvStatus();
/**
* 查询立体仓库领料申请单统计
* <p><b>物料判断规则</b>料号以3或7开头</p>
*
* <p><b>数据说明</b></p>
* <p><b>返回数据结构</b></p>
* <ul>
* <li>total - 总数</li>
* <li>completed - 已完成数</li>
* <li>processing - 处理中数</li>
* <li>pending - 待处理数</li>
* <li>completionRate - 完成率百分比</li>
* <li>dayNum - 日期1-31</li>
* <li>quantity - 库存数量</li>
* </ul>
*
* @return 领料申请单统计
* @return 规格料库存趋势列表
*/
Map<String, Object> queryWarehouseMaterialRequestStats();
List<Map<String, Object>> querySpecifiedMaterialInventoryTrend();
/**
* 查询立体仓库发货统计
* 查询产成品库存量趋势当月每日数据
*
* <p><b>数据说明</b></p>
* <p><b>物料判断规则</b>料号以8开头</p>
*
* <p><b>返回数据结构</b></p>
* <ul>
* <li>total - 总数</li>
* <li>completed - 已完成数</li>
* <li>processing - 处理中数</li>
* <li>pending - 待处理数</li>
* <li>completionRate - 完成率百分比</li>
* <li>dayNum - 日期1-31</li>
* <li>quantity - 库存数量</li>
* </ul>
*
* @return 发货统计
* @return 产成品库存趋势列表
*/
Map<String, Object> queryWarehouseShipmentStats();
List<Map<String, Object>> queryFinishedGoodsInventoryTrend();
}

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

@ -403,6 +403,16 @@ public class DashboardPushTask {
Map<String, Object> shipmentStats = new HashMap<>();
log.debug("发货统计: {}", shipmentStats);
// 查询库存趋势数据
List<Map<String, Object>> rawMaterialTrend = dashboardDao.queryRawMaterialInventoryTrend();
log.debug("查询到原材料库存趋势数据: {}条", rawMaterialTrend != null ? rawMaterialTrend.size() : 0);
List<Map<String, Object>> specifiedMaterialTrend = dashboardDao.querySpecifiedMaterialInventoryTrend();
log.debug("查询到规格料库存趋势数据: {}条", specifiedMaterialTrend != null ? specifiedMaterialTrend.size() : 0);
List<Map<String, Object>> finishedGoodsTrend = dashboardDao.queryFinishedGoodsInventoryTrend();
log.debug("查询到产成品库存趋势数据: {}条", finishedGoodsTrend != null ? finishedGoodsTrend.size() : 0);
// 构造返回数据
Map<String, Object> resultData = new HashMap<>();
resultData.put("taskData", taskStats != null ? taskStats : new HashMap<>());
@ -411,6 +421,11 @@ public class DashboardPushTask {
resultData.put("agvData", agvStatus != null ? agvStatus : new ArrayList<>());
resultData.put("materialRequestData", materialRequestStats != null ? materialRequestStats : new HashMap<>());
resultData.put("shipmentData", shipmentStats != null ? shipmentStats : new HashMap<>());
// 添加库存趋势数据
resultData.put("rawMaterialTrend", rawMaterialTrend != null ? rawMaterialTrend : new ArrayList<>());
resultData.put("specifiedMaterialTrend", specifiedMaterialTrend != null ? specifiedMaterialTrend : new ArrayList<>());
resultData.put("finishedGoodsTrend", finishedGoodsTrend != null ? finishedGoodsTrend : new ArrayList<>());
log.debug("智能立体仓库看板数据组装完成");
return resultData;

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

@ -34,243 +34,30 @@
-- 说明:从 wms_order_task 表统计任务数据
-- 只统计已完成的任务(status='已完成')
-- source_type 包含"入库"两个字的是入库任务,其他都是出库任务
SELECT
-- 累计任务总数(历史所有已完成任务)
(SELECT COUNT(DISTINCT task_no)
FROM wms_order_task
) AS totalTasks,
-- 月度作业总数(当月已完成任务数)
(SELECT COUNT(DISTINCT task_no)
FROM wms_order_task
WHERE MONTH(created_time) = MONTH(GETDATE())
AND YEAR(created_time) = YEAR(GETDATE())) AS monthlyTasks,
-- 当日作业总数(当日已完成任务数)
(SELECT COUNT(DISTINCT task_no)
FROM wms_order_task
WHERE created_time >= DATEADD(DAY, -5, GETDATE())) AS todayTasks,
-- 出库作业数(当月已完成,source_type不包含"入库")
(SELECT COUNT(DISTINCT task_no)
FROM wms_order_task
WHERE (source_type NOT LIKE '%入库%' OR source_type IS NULL)
AND MONTH(created_time) = MONTH(GETDATE())
AND YEAR(created_time) = YEAR(GETDATE())) AS outboundTasks,
-- 入库作业数(当月已完成,source_type包含"入库")
(SELECT COUNT(DISTINCT task_no)
FROM wms_order_task
WHERE source_type LIKE '%入库%'
AND MONTH(created_time) = MONTH(GETDATE())
AND YEAR(created_time) = YEAR(GETDATE())) AS inboundTasks,
-- 出库占比(百分比)
CASE
WHEN (SELECT COUNT(DISTINCT task_no)
FROM wms_order_task
WHERE MONTH(created_time) = MONTH(GETDATE())
AND YEAR(created_time) = YEAR(GETDATE())) > 0
THEN CAST(
(SELECT COUNT(DISTINCT task_no)
FROM wms_order_task
WHERE (source_type NOT LIKE '%入库%' OR source_type IS NULL)
AND MONTH(created_time) = MONTH(GETDATE())
AND YEAR(created_time) = YEAR(GETDATE())) * 100.0 /
(SELECT COUNT(DISTINCT task_no)
FROM wms_order_task
WHERE MONTH(created_time) = MONTH(GETDATE())
AND YEAR(created_time) = YEAR(GETDATE()))
AS INT)
ELSE 0
END AS outboundPercent,
-- 入库占比(百分比)
CASE
WHEN (SELECT COUNT(DISTINCT task_no)
FROM wms_order_task
WHERE MONTH(created_time) = MONTH(GETDATE())
AND YEAR(created_time) = YEAR(GETDATE())) > 0
THEN CAST(
(SELECT COUNT(DISTINCT task_no)
FROM wms_order_task
WHERE source_type LIKE '%入库%'
AND MONTH(created_time) = MONTH(GETDATE())
AND YEAR(created_time) = YEAR(GETDATE())) * 100.0 /
(SELECT COUNT(DISTINCT task_no)
FROM wms_order_task
WHERE MONTH(created_time) = MONTH(GETDATE())
AND YEAR(created_time) = YEAR(GETDATE()))
AS INT)
ELSE 0
END AS inboundPercent
select * from view_board_master_task;
</select>
<!-- 查询立体仓库库位利用率数据 -->
<select id="queryWarehouseStorageUtilization" resultType="map">
-- 说明:根据实际库位表(如location、storage_location等)调整SQL
SELECT
-- 总库位数
(SELECT COUNT(*) FROM location WHERE is_deleted = '0' AND warehouse = 'WAREHOUSE_3D') AS totalSlots,
<!-- ==================== 库存趋势统计查询 ==================== -->
-- 已使用库位数(有库存的库位)
(SELECT COUNT(DISTINCT location_code) FROM inventory_stock
WHERE is_deleted = '0' AND in_stock_flag = 'Y') AS usedSlots,
-- 利用率(百分比,保留1位小数)
CASE
WHEN (SELECT COUNT(*) FROM location WHERE is_deleted = '0' AND warehouse = 'WAREHOUSE_3D') > 0
THEN CAST(
(SELECT COUNT(DISTINCT location_code) FROM inventory_stock
WHERE is_deleted = '0' AND in_stock_flag = 'Y') * 100.0 /
(SELECT COUNT(*) FROM location WHERE is_deleted = '0' AND warehouse = 'WAREHOUSE_3D')
AS DECIMAL(5,1))
ELSE 0
END AS utilizationRate,
-- 钢制托盘数量(根据pallet_type字段统计)
(SELECT COUNT(*) FROM pallet
WHERE is_deleted = '0' AND pallet_type = 'STEEL') AS steelPallet,
-- 护边托盘数量
(SELECT COUNT(*) FROM pallet
WHERE is_deleted = '0' AND pallet_type = 'GUARD') AS guardPallet,
-- 平托盘数量
(SELECT COUNT(*) FROM pallet
WHERE is_deleted = '0' AND pallet_type = 'FLAT') AS flatPallet
<!-- 查询原材料库存量趋势(当月每日数据) -->
<select id="queryRawMaterialInventoryTrend" resultType="map">
-- 说明:统计原材料(料号不以3、7、8开头)的当月每日库存数量
-- 原材料判断:料号不以 3、7、8 开头 view_board_master_task
select * from view_board_master_raw
</select>
<!-- 查询立体仓库机器人状态数据 -->
<select id="queryWarehouseRobotStatus" resultType="map">
-- 说明:根据实际设备表(如equipment、robot_device等)调整SQL
SELECT
id,
device_name AS name,
device_status AS status,
CASE device_status
WHEN 'WORKING' THEN '工作中'
WHEN 'IDLE' THEN '空闲'
WHEN 'CHARGING' THEN '充电中'
WHEN 'ERROR' THEN '故障'
ELSE '未知'
END AS statusText,
efficiency,
current_tasks AS tasks
FROM equipment_device
WHERE is_deleted = '0'
AND device_type = 'ROBOT'
AND warehouse = 'WAREHOUSE_3D'
ORDER BY id ASC
<!-- 查询规格料库存量趋势(当月每日数据) -->
<select id="querySpecifiedMaterialInventoryTrend" resultType="map">
-- 说明:统计规格料(料号以3或7开头)的当月每日库存数量
-- 规格料判断:料号以 3 或 7 开头
select * from view_board_master_specified
</select>
<!-- 查询立体仓库AGV状态数据(已废弃) -->
<!--
注意:AGV状态数据不从数据库查询,而是从TUSK系统实时获取
queryWarehouseAgvStatus 方法已在 DashboardPushTask.getAgvStatusFromTusk() 中实现
通过调用 TuskClientService.getOnlineRobots() 获取实时AGV状态
此查询保留空实现仅为避免MyBatis映射错误,实际不应被调用
-->
<select id="queryWarehouseAgvStatus" resultType="map">
SELECT
NULL AS id,
NULL AS name,
NULL AS status,
NULL AS statusText,
NULL AS battery,
NULL AS tasks
WHERE 1=0
</select>
<!-- 查询立体仓库领料申请单统计 -->
<select id="queryWarehouseMaterialRequestStats" resultType="map">
-- 说明:根据实际领料申请单表(如material_request、picking_order等)调整SQL
SELECT
-- 总数
(SELECT COUNT(*) FROM material_request
WHERE is_deleted = '0'
AND DATE(created_date) = CAST(GETDATE() AS DATE)) AS total,
-- 已完成数
(SELECT COUNT(*) FROM material_request
WHERE is_deleted = '0'
AND status = 'COMPLETED'
AND DATE(created_date) = CAST(GETDATE() AS DATE)) AS completed,
-- 处理中数
(SELECT COUNT(*) FROM material_request
WHERE is_deleted = '0'
AND status = 'PROCESSING'
AND DATE(created_date) = CAST(GETDATE() AS DATE)) AS processing,
-- 待处理数
(SELECT COUNT(*) FROM material_request
WHERE is_deleted = '0'
AND status = 'PENDING'
AND DATE(created_date) = CAST(GETDATE() AS DATE)) AS pending,
-- 完成率(百分比)
CASE
WHEN (SELECT COUNT(*) FROM material_request
WHERE is_deleted = '0'
AND DATE(created_date) = CAST(GETDATE() AS DATE)) > 0
THEN CAST(
(SELECT COUNT(*) FROM material_request
WHERE is_deleted = '0'
AND status = 'COMPLETED'
AND DATE(created_date) = CAST(GETDATE() AS DATE)) * 100.0 /
(SELECT COUNT(*) FROM material_request
WHERE is_deleted = '0'
AND DATE(created_date) = CAST(GETDATE() AS DATE))
AS INT)
ELSE 0
END AS completionRate
</select>
<!-- 查询立体仓库发货统计 -->
<select id="queryWarehouseShipmentStats" resultType="map">
-- 说明:根据实际发货单表(如shipment_order、delivery_order等)调整SQL
SELECT
-- 总数
(SELECT COUNT(*) FROM shipment_order
WHERE is_deleted = '0'
AND DATE(created_date) = CAST(GETDATE() AS DATE)) AS total,
-- 已完成数
(SELECT COUNT(*) FROM shipment_order
WHERE is_deleted = '0'
AND status = 'COMPLETED'
AND DATE(created_date) = CAST(GETDATE() AS DATE)) AS completed,
-- 处理中数
(SELECT COUNT(*) FROM shipment_order
WHERE is_deleted = '0'
AND status = 'PROCESSING'
AND DATE(created_date) = CAST(GETDATE() AS DATE)) AS processing,
-- 待处理数
(SELECT COUNT(*) FROM shipment_order
WHERE is_deleted = '0'
AND status = 'PENDING'
AND DATE(created_date) = CAST(GETDATE() AS DATE)) AS pending,
-- 完成率(百分比)
CASE
WHEN (SELECT COUNT(*) FROM shipment_order
WHERE is_deleted = '0'
AND DATE(created_date) = CAST(GETDATE() AS DATE)) > 0
THEN CAST(
(SELECT COUNT(*) FROM shipment_order
WHERE is_deleted = '0'
AND status = 'COMPLETED'
AND DATE(created_date) = CAST(GETDATE() AS DATE)) * 100.0 /
(SELECT COUNT(*) FROM shipment_order
WHERE is_deleted = '0'
AND DATE(created_date) = CAST(GETDATE() AS DATE))
AS INT)
ELSE 0
END AS completionRate
<!-- 查询产成品库存量趋势(当月每日数据) -->
<select id="queryFinishedGoodsInventoryTrend" resultType="map">
-- 说明:统计产成品(料号以8开头)的当月每日库存数量
-- 产成品判断:料号以 8 开头
select * from view_board_master_finish
</select>
</mapper>

Loading…
Cancel
Save