问题修改
This commit is contained in:
parent
76a2ef5347
commit
8435db8876
|
|
@ -305,5 +305,7 @@ public interface DevInfoMapper {
|
|||
Integer getTotalEquipmentByLevel(DevInfoReq devInfoReq);
|
||||
|
||||
int getTurnoverRateByLevel(DevInfoReq devInfoReq);
|
||||
|
||||
int getProjectNUm();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -301,7 +301,9 @@ public class ProvinceScreenServiceImpl implements ProvinceScreenService {
|
|||
//年度总投资额 TODO 输入的
|
||||
res.put("annualTotal", "140.6");
|
||||
//在建工程数 TODO e基建2.0获取
|
||||
res.put("projectNUm", 50);
|
||||
|
||||
int projectNUm = devInfoMapper.getProjectNUm();
|
||||
res.put("projectNUm", projectNUm);
|
||||
|
||||
//在用装备数
|
||||
//自用--2
|
||||
|
|
|
|||
|
|
@ -10,7 +10,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
IFNULL(sum( buy_price * device_count ),0) AS totalValue
|
||||
FROM
|
||||
ma_dev_info
|
||||
WHERE is_active = 1 and on_company = #{companyId}
|
||||
|
||||
WHERE is_active = 1 and on_company = #{companyId} and entry_status = '1' and change_status !='4'
|
||||
</select>
|
||||
|
||||
<select id="getTodayDeviceEnterOutNum" resultType="com.bonus.material.cityScreen.VO.BasicTitleVO">
|
||||
|
|
@ -94,14 +95,51 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
where mdi.is_active = 1 and mdi.on_company = #{companyId} and mdi.change_status != 4
|
||||
</select>
|
||||
<select id="retirementAlarm" resultType="com.bonus.material.cityScreen.VO.AlarmVO">
|
||||
select
|
||||
mdi.device_name as deviceName,
|
||||
mtv.devCategory as procedureName,
|
||||
concat('差',TIMESTAMPDIFF(DAY, NOW(),mdi.expiration_time),'天退役') as situation
|
||||
from ma_dev_info mdi
|
||||
INNER join ma_type_view mtv on mtv.typeId = mdi.type_id
|
||||
where mdi.is_active = 1 and mdi.on_company = #{companyId} and mdi.change_status != 4
|
||||
order by TIMESTAMPDIFF(YEAR, NOW(),mdi.expiration_time)
|
||||
SELECT
|
||||
mdi.device_name AS deviceName,
|
||||
mtv.devCategory AS procedureName,
|
||||
-- 核心:按「剩余可用年限」判断状态(剩余年限 = 最大年限 - 已使用年限)
|
||||
CASE
|
||||
-- 告警2:已超期(剩余年限≤0)
|
||||
WHEN ROUND(TIMESTAMPDIFF(DAY, mdi.production_date, NOW()) / 365.25, 1) >= mdi.max_working_hours
|
||||
THEN CONCAT('告警:已超最大使用年限', ROUND(
|
||||
ROUND(TIMESTAMPDIFF(DAY, mdi.production_date, NOW()) / 365.25, 1) - mdi.max_working_hours,
|
||||
1
|
||||
), '年')
|
||||
-- 告警1:未超期,但剩余可用年限≤1年(相差小于等于1年)
|
||||
WHEN (mdi.max_working_hours - ROUND(TIMESTAMPDIFF(DAY, mdi.production_date, NOW()) / 365.25, 1)) <= 1
|
||||
THEN CONCAT('告警:即将超期,剩余可用年限', ROUND(
|
||||
mdi.max_working_hours - ROUND(TIMESTAMPDIFF(DAY, mdi.production_date, NOW()) / 365.25, 1),
|
||||
1
|
||||
), '年')
|
||||
-- 正常:未超期,且剩余可用年限>1年(相差大于1年)
|
||||
ELSE CONCAT('正常:剩余可用年限', ROUND(
|
||||
mdi.max_working_hours - ROUND(TIMESTAMPDIFF(DAY, mdi.production_date, NOW()) / 365.25, 1),
|
||||
1
|
||||
), '年')
|
||||
END AS situation
|
||||
FROM
|
||||
ma_dev_info mdi
|
||||
INNER JOIN ma_type_view mtv
|
||||
ON mtv.typeId = mdi.type_id
|
||||
WHERE
|
||||
mdi.is_active = 1
|
||||
AND mdi.on_company = #{companyId} -- MyBatis 参数占位符(安全防注入)
|
||||
AND mdi.change_status != 4
|
||||
-- 排序:超期告警>即将超期告警>正常(按紧急程度)
|
||||
ORDER BY
|
||||
CASE
|
||||
-- 超期告警(优先级1)
|
||||
WHEN ROUND(TIMESTAMPDIFF(DAY, mdi.production_date, NOW()) / 365.25, 1) >= mdi.max_working_hours THEN 0
|
||||
-- 即将超期告警(优先级2)
|
||||
WHEN (mdi.max_working_hours - ROUND(TIMESTAMPDIFF(DAY, mdi.production_date, NOW()) / 365.25, 1)) <= 1 THEN 1
|
||||
-- 正常(优先级3)
|
||||
ELSE 2
|
||||
END ASC,
|
||||
-- 超期告警:超期越久越靠前
|
||||
(ROUND(TIMESTAMPDIFF(DAY, mdi.production_date, NOW()) / 365.25, 1) - mdi.max_working_hours) DESC,
|
||||
-- 即将超期告警:剩余年限越少越靠前
|
||||
(mdi.max_working_hours - ROUND(TIMESTAMPDIFF(DAY, mdi.production_date, NOW()) / 365.25, 1)) ASC
|
||||
</select>
|
||||
|
||||
<select id="countRetirementAlarm" resultType="int">
|
||||
|
|
|
|||
|
|
@ -1352,7 +1352,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
LEFT JOIN sys_dept sd ON mli.publish_company = sd.dept_id
|
||||
</select>
|
||||
<select id="getTotalEquipment" resultType="java.lang.Integer">
|
||||
select count(1) from ma_dev_info where is_active ='1'
|
||||
select count(1) from ma_dev_info where is_active ='1' and entry_status = '1' and change_status !='4'
|
||||
<if test="ownCo != null ">
|
||||
AND on_company = #{ownCo}
|
||||
</if>
|
||||
|
|
@ -1361,7 +1361,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
</if>
|
||||
</select>
|
||||
<select id="getTotalValue" resultType="java.math.BigDecimal">
|
||||
select SUM(buy_price) from ma_dev_info where is_active ='1'
|
||||
select SUM(buy_price) from ma_dev_info where is_active ='1' and entry_status = '1' and change_status !='4'
|
||||
<if test="ownCo != null ">
|
||||
AND on_company = #{ownCo}
|
||||
</if>
|
||||
|
|
@ -1371,14 +1371,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
from ma_dev_info mdi
|
||||
INNER JOIN ma_type_view mtv ON mtv.typeId = mdi.type_id
|
||||
where mtv.maxTypeId = #{typeId}
|
||||
and mdi.is_active = '1'
|
||||
and mdi.is_active = '1' and mdi.entry_status = '1' and mdi.change_status !='4'
|
||||
and on_company = #{ownCo}
|
||||
</select>
|
||||
<select id="getLinePrice" resultType="java.math.BigDecimal">
|
||||
select sum(mdi.buy_price)
|
||||
from ma_dev_info mdi
|
||||
INNER JOIN ma_type_view mtv ON mtv.typeId = mdi.type_id
|
||||
where mtv.maxTypeId = #{typeId}
|
||||
and mdi.is_active = '1'
|
||||
and mdi.is_active = '1' and mdi.entry_status = '1' and mdi.change_status !='4'
|
||||
and on_company = #{ownCo}
|
||||
</select>
|
||||
<select id="getLineProductionDateList" resultType="java.lang.String">
|
||||
select production_date
|
||||
|
|
@ -1386,6 +1388,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
INNER JOIN ma_type_view mtv ON mtv.typeId = mdi.type_id
|
||||
where mtv.maxTypeId = #{typeId}
|
||||
and mdi.is_active = '1'
|
||||
and on_company = #{ownCo}
|
||||
</select>
|
||||
<select id="getUnitEquipmentConfiguration" resultType="com.bonus.material.equipment.domain.SysDept">
|
||||
select production_date
|
||||
|
|
@ -1524,4 +1527,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
AND mtv.typeId = #{typeId}
|
||||
</if>
|
||||
</select>
|
||||
<select id="getProjectNUm" resultType="java.lang.Integer">
|
||||
SELECT COUNT(1)
|
||||
from jj_sing_project
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
|||
|
|
@ -727,44 +727,46 @@
|
|||
ORDER BY proportion DESC
|
||||
</select>
|
||||
<select id="getEquipmentUse" resultType="java.util.Map">
|
||||
|
||||
SELECT
|
||||
-- 工程基础信息
|
||||
-- 工程基础信息(确保唯一)
|
||||
jsp.pro_code AS proCode,
|
||||
jsp.pro_name AS projectName,
|
||||
-- 该工程的装备数量(有效设备)
|
||||
-- 该工程的有效装备数量(DISTINCT 去重,避免设备重复统计)
|
||||
COUNT(DISTINCT mdi.ma_id) AS inUser,
|
||||
-- 生成60-100的随机规模值(保留0位小数,整数)
|
||||
-- 随机规模值(60-100整数,每个工程仅生成1次,与分组绑定)
|
||||
FLOOR(RAND() * (100 - 60 + 1) + 60) AS scale,
|
||||
-- 计算:装备数/规模×100(保留2位小数,避免除数为0)
|
||||
-- 装备使用率:装备数/规模×100(保留2位小数,除数/装备数为0时显示0)
|
||||
ROUND(
|
||||
IF(
|
||||
COUNT(DISTINCT mdi.ma_id) = 0, -- 若装备数为0,结果为0
|
||||
COUNT(DISTINCT mdi.ma_id) = 0 OR FLOOR(RAND() * (100 - 60 + 1) + 60) = 0,
|
||||
0,
|
||||
COUNT(DISTINCT mdi.ma_id) / FLOOR(RAND() * (100 - 60 + 1) + 60) * 100
|
||||
-- 复用随机数逻辑:用 USER() + pro_code 作为 RAND() 种子,确保同一行随机数一致
|
||||
COUNT(DISTINCT mdi.ma_id) / FLOOR(RAND(CONCAT(USER(), jsp.pro_code)) * (100 - 60 + 1) + 60) * 100
|
||||
),
|
||||
2
|
||||
) AS `usage`
|
||||
FROM jj_sing_project jsp
|
||||
-- 左连接设备表:关联“工程编码”(jsp.pro_code)和“设备所属工程”(mdi.on_project)
|
||||
-- 左连接设备表:保留所有工程,无设备则 inUser=0
|
||||
LEFT JOIN ma_dev_info mdi
|
||||
ON mdi.on_project = jsp.pro_code
|
||||
-- 可选:筛选“有效设备”(排除未激活/已报废的设备,根据业务补充)
|
||||
AND mdi.is_active = '1' -- 假设is_active=1代表设备有效
|
||||
-- 设备筛选条件写在 ON 后,不过滤无设备的工程
|
||||
AND mdi.is_active = '1'
|
||||
AND mdi.change_status IN (2, 3)
|
||||
AND mdi.entry_status = '1'
|
||||
<where>
|
||||
<!-- 条件筛选(不影响左连接的全量工程,仅过滤工程本身) -->
|
||||
<if test="proCode != null and proCode != ''">
|
||||
AND jsp.pro_code = #{proCode}
|
||||
</if>
|
||||
<if test="proType!= null and proType != ''">
|
||||
<if test="proType != null and proType != ''">
|
||||
AND jsp.project_type = #{proType}
|
||||
</if>
|
||||
</where>
|
||||
|
||||
-- 按工程分组,统计每个工程的设备数量
|
||||
GROUP BY jsp.pro_code, jsp.pro_name -- 按工程编码+名称分组(确保工程唯一)
|
||||
-- 可选:排序(按设备数量倒序,查看设备最多的工程)
|
||||
ORDER BY inUser DESC
|
||||
-- 按工程唯一标识分组(核心去重:确保每个工程仅1行记录)
|
||||
GROUP BY jsp.pro_code, jsp.pro_name
|
||||
-- 排序:按使用率降序,设备数量降序
|
||||
ORDER BY `usage` DESC, inUser DESC
|
||||
</select>
|
||||
<select id="getProNum" resultType="java.lang.Integer">
|
||||
SELECT
|
||||
|
|
@ -835,61 +837,62 @@
|
|||
ORDER BY inUser DESC
|
||||
</select>
|
||||
<select id="getDeptEquipment">
|
||||
-- 按单位统计:设备在用率 + 近12个月每月出库次数(含无数据单位,MySQL 5 兼容版)
|
||||
SELECT
|
||||
-- 单位唯一标识(取自sys_dept全量单位,确保无数据单位也显示)
|
||||
sd_all.dept_id AS deptId,
|
||||
-- 单位名称(sys_dept表中字段为dept_name)
|
||||
sd_all.dept_name AS name,
|
||||
-- 单位设备在用率(无数据时显示0)
|
||||
IFNULL(ur.use_rate_percent, 0) AS proportion,
|
||||
-- 近12个月每月出库次数(无记录时显示0)
|
||||
IFNULL(oc.monthly_outbound_count, 0) AS turnoverRate
|
||||
sd_all.dept_id AS deptId, -- 字段1:单位ID
|
||||
sd_all.dept_name AS name, -- 字段2:单位名称
|
||||
IFNULL(ur.use_rate_percent, 0) AS proportion, -- 字段3:设备在用率(无数据显示0)
|
||||
IFNULL(oc.total_outbound_count, 0) AS turnoverRate -- 字段4:近12个月总出库次数(无数据显示0)
|
||||
FROM
|
||||
-- 核心:先获取sys_dept表中所有单位(确保无数据单位不丢失)
|
||||
-- 全量单位表(确保无数据单位不丢失)
|
||||
sys_dept sd_all
|
||||
-- 左连接“在用率统计结果”:全量单位关联在用率数据,无数据则为NULL
|
||||
-- 左连接:单位在用率统计(1单位1行)
|
||||
LEFT JOIN (
|
||||
-- 子查询1:按单位统计设备在用率(MySQL 5 多字段去重兼容)
|
||||
SELECT sd.dept_id,
|
||||
ROUND(
|
||||
IF(
|
||||
-- 用CONCAT解决MySQL 5 不支持多字段DISTINCT的问题
|
||||
COUNT(DISTINCT CONCAT(mdi.ma_id, '_', DATE(mddu.create_time))) = 0,
|
||||
0,
|
||||
-- 单位内在用天数 ÷ 单位总记录天数 × 100%
|
||||
COUNT(DISTINCT CASE
|
||||
WHEN mddu.`status` = 1
|
||||
THEN CONCAT(mdi.ma_id, '_', DATE(mddu.create_time)) END)
|
||||
/ COUNT(DISTINCT CONCAT(mdi.ma_id, '_', DATE(mddu.create_time))) * 100
|
||||
),
|
||||
2
|
||||
) AS use_rate_percent
|
||||
-- 子查询1:按单位统计设备在用率(MySQL 5 兼容)
|
||||
SELECT
|
||||
sd.dept_id,
|
||||
ROUND(
|
||||
IF(
|
||||
COUNT(DISTINCT CONCAT(mdi.ma_id, '_', DATE(mddu.create_time))) = 0,
|
||||
0,
|
||||
COUNT(DISTINCT CASE
|
||||
WHEN mddu.`status` = 1 THEN CONCAT(mdi.ma_id, '_', DATE(mddu.create_time))
|
||||
END)
|
||||
/ COUNT(DISTINCT CONCAT(mdi.ma_id, '_', DATE(mddu.create_time))) * 100
|
||||
),
|
||||
2
|
||||
) AS use_rate_percent
|
||||
FROM ma_dev_info mdi
|
||||
LEFT JOIN ma_dev_daily_use mddu ON mddu.ma_id = mdi.ma_id
|
||||
LEFT JOIN sys_dept sd ON sd.dept_id = mdi.on_company
|
||||
WHERE mdi.is_active = '1'
|
||||
WHERE
|
||||
mdi.is_active = '1'
|
||||
AND mdi.change_status != '4'
|
||||
AND mdi.entry_status = '1'
|
||||
GROUP BY sd.dept_id) AS ur ON sd_all.dept_id = ur.dept_id
|
||||
|
||||
-- 左连接“出库次数统计结果”:全量单位关联出库数据,无数据则为NULL
|
||||
GROUP BY sd.dept_id
|
||||
) AS ur ON sd_all.dept_id = ur.dept_id
|
||||
-- 左连接:单位近12个月总出库次数(1单位1行,无重复)
|
||||
LEFT JOIN (
|
||||
-- 子查询2:按单位统计近12个月每月出库次数
|
||||
SELECT sd.dept_id,
|
||||
DATE_FORMAT(cdcd.use_time, '%Y-%m') AS stat_year_month,
|
||||
COUNT(*) AS monthly_outbound_count
|
||||
-- 子查询2:按单位统计近12个月总出库次数
|
||||
SELECT
|
||||
sd.dept_id,
|
||||
COUNT(*) AS total_outbound_count
|
||||
FROM cs_device_change_details cdcd
|
||||
-- 关联设备表过滤有效设备
|
||||
INNER JOIN ma_dev_info mdi
|
||||
ON mdi.ma_id = cdcd.dev_id
|
||||
AND mdi.is_active = '1'
|
||||
AND mdi.change_status != '4'
|
||||
AND mdi.entry_status = '1'
|
||||
-- 关联单位表获取所属单位
|
||||
LEFT JOIN sys_dept sd ON sd.dept_id = mdi.on_company
|
||||
WHERE cdcd.`status` = 2 -- 出库状态(按实际业务调整)
|
||||
WHERE
|
||||
cdcd.`status` = 2 -- 出库状态(按实际业务调整)
|
||||
AND cdcd.use_time IS NOT NULL
|
||||
AND cdcd.use_time >= DATE_SUB(CURDATE(), INTERVAL 12 MONTH)
|
||||
GROUP BY sd.dept_id, DATE_FORMAT(cdcd.use_time, '%Y-%m')) AS oc ON sd_all.dept_id = oc.dept_id
|
||||
-- 可选:按单位ID排序,确保结果顺序稳定
|
||||
ORDER BY proportion DESC
|
||||
GROUP BY sd.dept_id
|
||||
) AS oc ON sd_all.dept_id = oc.dept_id
|
||||
-- 按在用率降序排序(无数据单位排最后)
|
||||
ORDER BY proportion DESC;
|
||||
</select>
|
||||
|
||||
<delete id="deleteMaTypePropertyNames">
|
||||
|
|
|
|||
Loading…
Reference in New Issue