项目计费面积逻辑优化,从ODS取数,以房间表房屋状态为准

This commit is contained in:
yangkunan 2024-09-10 15:16:21 +08:00
parent 3909b09182
commit 7b6e7beb5f

View File

@ -31,7 +31,7 @@ SELECT
,A.UndergroundArea AS undergroundarea -- 地下面积
,A.ContractArea AS contractarea -- 合约面积
,A.TakeOverArea AS takeoverarea -- 在管面积
,E.CalcArea AS CalcArea -- 收费面积
,C.CalcArea AS CalcArea -- 收费面积
,A.GreenArea AS greenarea -- 绿化面积
,C.room_num AS room_num -- 总户数
,C.delivered_num AS delivered_num -- 已交付户数
@ -123,20 +123,44 @@ ON A.CommId = B.comm_id
LEFT JOIN
(
SELECT
CommID
,SUM(CASE WHEN roomstate <> 0 THEN 1 ELSE 0 END) AS room_num -- 项目对应房间数量
,SUM(CASE WHEN roomstate IN ( '1', '4', '9', '10', '5', '6' ) THEN buildarea ELSE 0 END ) AS sold_area -- 已售面积
,SUM(CASE WHEN roomstate = '2' THEN buildarea ELSE 0 END ) AS unsold_area -- 未售面积
,SUM(CASE WHEN roomstate NOT IN('0','2') THEN 1 ELSE 0 END ) AS delivered_num -- 已交付户数
,SUM(CASE WHEN roomstate IN ( '4', '9', '10', '5', '6' ) THEN 1 ELSE 0 END ) AS rece_num -- 已接房数
,SUM(CASE WHEN roomstate = '4' THEN 1 ELSE 0 END ) AS fit_num -- 正在装修户数
,SUM(CASE WHEN roomstate IN ( '9', '10', '5', '6' ) THEN 1 ELSE 0 END ) AS done_fit_num -- 已完成装修户数
,SUM(CASE WHEN roomstate = '5' THEN 1 ELSE 0 END ) AS done_fit_no -- 已完成装修未入住
,SUM(CASE WHEN roomstate IN ( '9', '10', '6' ) THEN 1 ELSE 0 END ) AS done_fit_yes -- 已完成装修已入住
FROM dw.dim_room_d a
-- 排除掉房间表里房屋状态是未删除而在费用表里是删除的房子
WHERE exists(SELECT 1 FROM dim_bind_cost_stan_detail_d B WHERE a.CommID = b.CommID AND A.RoomID = b.RoomID)
GROUP BY CommID
a.CommID AS CommID
,SUM(CASE WHEN a.roomstate <> 0 THEN 1 ELSE 0 END) AS room_num -- 项目对应房间数量
,SUM(CASE WHEN a.roomstate IN ( '1', '4', '9', '10', '5', '6' ) THEN a.buildarea ELSE 0 END ) AS sold_area -- 已售面积
,SUM(CASE WHEN a.roomstate = '2' THEN a.buildarea ELSE 0 END ) AS unsold_area -- 未售面积
,SUM(CASE WHEN a.roomstate NOT IN('0','2') THEN 1 ELSE 0 END ) AS delivered_num -- 已交付户数
,SUM(CASE WHEN a.roomstate IN ( '4', '9', '10', '5', '6' ) THEN 1 ELSE 0 END ) AS rece_num -- 已接房数
,SUM(CASE WHEN a.roomstate = '4' THEN 1 ELSE 0 END ) AS fit_num -- 正在装修户数
,SUM(CASE WHEN a.roomstate IN ( '9', '10', '5', '6' ) THEN 1 ELSE 0 END ) AS done_fit_num -- 已完成装修户数
,SUM(CASE WHEN a.roomstate = '5' THEN 1 ELSE 0 END ) AS done_fit_no -- 已完成装修未入住
,SUM(CASE WHEN a.roomstate IN ( '9', '10', '6' ) THEN 1 ELSE 0 END ) AS done_fit_yes -- 已完成装修已入住
,SUM(b.CalcArea) AS CalcArea
FROM
(
SELECT
*
FROM dw.dim_room_d
)a
LEFT JOIN
(
SELECT
b1.CommId AS CommId
,b1.RoomID AS RoomID
,SUM(CalcArea) AS CalcArea
FROM
(
SELECT
CommId
, CalcArea
, RoomID
FROM ods_erp_tb_hspr_coststansetting_d
WHERE RoomID <> '0'
GROUP BY CommId, CalcArea, RoomID
)b1
GROUP BY b1.CommId,b1.RoomID
)b
ON a.CommID = b.CommId
AND a.RoomID = b.RoomID
GROUP BY CommID
)C
ON A.CommId = C.CommID
LEFT JOIN
@ -152,38 +176,6 @@ LEFT JOIN
)D
ON A.COMMID = D.COMMID
LEFT JOIN
(
SELECT
A.CommId AS CommId
,SUM(A.CalcArea ) AS CalcArea
FROM
(
SELECT
CommId
,CalcArea
,RoomID
FROM dim_bind_cost_stan_detail_d
WHERE RoomID <> 0
GROUP BY
CommId
,CalcArea
,RoomID
)A
JOIN
(-- 排除掉费用表里房屋状态是未删除而在房间表里是删除的房子
SELECT
CommID
,RoomID
FROM dw.dim_room_d
GROUP BY CommID,RoomID
)B
ON A.RoomID = B.RoomID
AND a.CommID = B.CommID
GROUP BY
A.CommId
)E
ON A.COMMID = E.COMMID
LEFT JOIN
(
SELECT
A.CommId
@ -429,4 +421,289 @@ AND CASE WHEN'${fine_username}' = 'WangXiaoLi0726'
THEN comm_name IN('【眉山】领地花屿二期','【眉山】领地凯旋国际公馆二期')
WHEN'${fine_username}' = 'WangJing'
THEN comm_name IN('【乐山】澜山悦','【乐山】领地蘭台府')
ELSE ${if(left(fine_role,2)=="项目","comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")}
ELSE ${if(left(fine_role,2)=="项目","comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")}
-- ======================================
-- 数据集逻辑
-- ======================================
-- ****************************************
-- 创建人员: 杨坤安
-- 创建日期: 2024-07-22
-- 功 能: 帆软明细报表-项目明细弹窗
-- 目 录: xianzuan>2_运营>项目明细弹窗.fvs
-- ****************************************
with one_to_many AS(
SELECT
a.username AS username -- 用户名
,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名
FROM ods_one_to_many_perm a
JOIN mysql.help_topic b
on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1)
WHERE a.username = '${fine_username}'
)
SELECT
A.ManageKindName , -- 管理性质名称 【项目归属】
A.Province,-- 省
A.City,-- 市
A.Citylevel,-- 城市级别
A.ManageStage,-- 项目状态
A.TakeOverTime,-- 交付时间
A.CommFrom,-- 项目来源
A.DevSubject,-- 项目开发商名称
A.CommAddress,-- 项目地址
CASE
WHEN ProjectFloorPlan IS NULL
OR JSON_EXTRACT( JSON_EXTRACT( cast( A.ProjectFloorPlan AS JSON ), '$[0]' ), '$.FileName' ) IS NULL THEN''
WHEN JSON_EXTRACT( JSON_EXTRACT( cast( A.ProjectFloorPlan AS JSON ), '$[0]' ), '$.FileName' ) IS NOT NULL THEN''
END AS IS_UPLOAD,-- 是否有上传项目平面图 -- 项目平面图
( A.FloorArea + A.UndergroundArea ) AS TotalArea,-- 建筑总面积
A.FloorArea,-- 地上面积
A.UndergroundArea,-- 地下面积
A.GreenArea,-- 绿化面积
A.ContractTerm,
A.PropertyMgrEntrustType,
CASE
WHEN A.IsContractFiled = '1' THEN'' ELSE ''
END AS ,
A.ProjectDeliverySituation,
D.UnsoldParkingCount,
IF( A.PedEntrExitsCount = 0 OR PedEntrExitsCount IS NULL, '-', PedEntrExitsCount ) AS PedEntrExitsCount,
IF( A.CarEntrExitsCount = 0 OR CarEntrExitsCount IS NULL, '-', CarEntrExitsCount ) AS CarEntrExitsCount,
IF( A.MixedEntrExitsCount = 0 OR MixedEntrExitsCount IS NULL, '-', MixedEntrExitsCount ) AS MixedEntrExitsCount,
IF( A.GuardedEntrExitsCount = 0 OR GuardedEntrExitsCount IS NULL, '-', GuardedEntrExitsCount ) AS GuardedEntrExitsCount,
IF( A.MonitoringRoomCount = 0 OR MonitoringRoomCount IS NULL, '-', MonitoringRoomCount ) AS MonitoringRoomCount,
-- TotalEntrExitsCount = PedEntrExitsCount + CarEntrExitsCount +MixedEntrExitsCount
IF( A.PedEntrExitsCount = 0 OR PedEntrExitsCount IS NULL, '-', PedEntrExitsCount )
+ IF( A.CarEntrExitsCount = 0 OR CarEntrExitsCount IS NULL, '-', CarEntrExitsCount )
+ IF( A.MixedEntrExitsCount = 0 OR MixedEntrExitsCount IS NULL, '-', MixedEntrExitsCount ) AS TotalEntrExitsCount,
A.IsMonRoomMergedToGate,
A.ContractArea,-- 合同面积 【建筑面积】
A.TakeOverArea,-- 接管面积 【合约面积】
A.ManageContractArea ManageContractArea,-- 管理口径合同面积 【在管面积】
A.StateName AS StateName,-- 业态 【项目业态】
A.ContractName,-- 合同类型
A.GetMethod,-- 项目获取渠道
A.ContractPartyName,-- 合同对方名称
CASE
WHEN A.IsSetCommittee = '1' THEN'' ELSE ''
END AS ,-- 是否已成立业主委员会
A.CommitteeTime,-- 业委会成立时间
A.ChargeMode,
CONCAT(DATE_FORMAT(A.CommitteeTermStartDate, '%Y-%m-%d' ) , '',DATE_FORMAT(A.CommitteeTermEndDate, '%Y-%m-%d' )) AS ,-- 任职时间
C.room_num AS room_num,-- 总户数
B.organ_name AS organ_name,-- erp片区名称
B.comm_name AS comm_name,-- erp项目名称
C.``,
C.``,
D.``,
C.``,
C.``,
C.``,
C.``,
C.``,
C.``,
(C.`` / C.`` ) AS ,
(C.`` / C.`` ) AS ,
C.,-- 收费面积
A.,
G.,
G.,
G.,
G.,
G.,
G.,
G.,
G.,
G.,
G.,
G.,
G.,
G.,
G.
FROM
(
SELECT
T.*
,max(T.GetTime) OVER(PARTITION BY T.CommId)AS
FROM
(
SELECT
*
,row_number() OVER(PARTITION BY CommId ORDER BY GetTime DESC) AS RK
FROM dw.dim_project_base_info_d -- 项目维度表
)T
WHERE T.RK = 1
) A
JOIN
(
SELECT
organ_code, -- erp片区id
organ_name, -- erp片区名称
comm_id, -- erp项目id
comm_name -- erp项目名称
FROM dw.dim_organ_mapping -- 片区项目映射维度表
WHERE comm_id IS NOT NULL
AND comm_name NOT LIKE '%撤场%'
AND comm_name NOT LIKE '%案场%'
AND comm_name NOT LIKE '%禁用%'
AND length( comm_id ) != 0
${IF(LEN(p_area)!=0," and organ_code IN ('"+p_area+"')","")}
-- ${if(left(fine_role,2)=="项目","and comm_name = '"+GETUSERDEPARTMENTS(3)+"'","")}
AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}') IS NOT NULL
THEN comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}')
ELSE ${if(left(fine_role,2)=="项目","comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")}
END
GROUP BY
organ_code, -- erp片区id
organ_name, -- erp片区名称
comm_id, -- erp项目id
comm_name -- erp项目名称
)B
ON A.CommId = B.comm_id
LEFT JOIN
(
SELECT
a.CommID
,SUM(CASE WHEN a.roomstate <> 0 THEN 1 ELSE 0 END) AS room_num, -- 项目对应房间数量
SUM( CASE WHEN a.roomstate IN ( '1', '4', '9', '10', '5', '6' ) THEN a.buildarea ELSE 0 END ) AS ,
SUM( CASE WHEN a.roomstate = '2' THEN a.buildarea ELSE 0 END ) AS ,
SUM( CASE WHEN a.roomstate NOT IN('0','2') THEN 1 ELSE 0 END ) AS ,
SUM( CASE WHEN a.roomstate IN ( '4', '9', '10', '5', '6' ) THEN 1 ELSE 0 END ) AS ,
SUM( CASE WHEN a.roomstate = '4' THEN 1 ELSE 0 END ) AS ,
SUM( CASE WHEN a.roomstate IN ( '9', '10', '5', '6' ) THEN 1 ELSE 0 END ) AS ,
SUM( CASE WHEN a.roomstate = '5' THEN 1 ELSE 0 END ) AS ,
SUM( CASE WHEN a.roomstate IN ( '9', '10', '6' ) THEN 1 ELSE 0 END ) AS ,
SUM(b.CalcArea) AS
FROM
(
SELECT
*
FROM dw.dim_room_d
)a
LEFT JOIN
(
SELECT
b1.CommId AS CommId
,b1.RoomID AS RoomID
,SUM(CalcArea) AS CalcArea
FROM
(
SELECT
CommId
, CalcArea
, RoomID
FROM ods_erp_tb_hspr_coststansetting_d
WHERE RoomID <> '0'
GROUP BY CommId, CalcArea, RoomID
)b1
GROUP BY b1.CommId,b1.RoomID
)b
ON a.CommID = b.CommId
AND a.RoomID = b.RoomID
GROUP BY CommID
)C
ON A.CommId = C.CommID
LEFT JOIN
(
SELECT
CommID
,SUM( CASE WHEN ParkingState IN ( '0001', '0003' ) THEN 1 ELSE 0 END ) AS
,SUM(CASE WHEN ParkingState IN ( '0002', '0004' ) THEN 1 ELSE 0 END) AS UnsoldParkingCount
FROM ods_erp_tb_hspr_parking_d
WHERE IsDelete = '0'
GROUP BY
CommID
)D
ON A.COMMID = D.COMMID
LEFT JOIN
(
SELECT
A.CommId
-- 住宅高层
,IFNULL(REPLACE(group_concat(CASE WHEN B.CostName IN ('高层物业服务费', '电梯电费', '公共能耗费') THEN ROUND(ROUND(B.StanAmount,2),2) END),',','\n'),'-') AS
-- 住宅多层
,IFNULL(REPLACE(group_concat(CASE WHEN B.CostName IN ('多层物业服务费', '公共能耗费') THEN ROUND(B.StanAmount,2) END),',','\n'),'-') AS
-- 别墅
,IFNULL(REPLACE(group_concat(CASE WHEN B.CostName IN ('别墅物业服务费', '公共能耗费') THEN ROUND(B.StanAmount,2) END),',','\n'),'-') AS
-- 联排物业服务费
,IFNULL(REPLACE(group_concat(CASE WHEN B.CostName LIKE '%联排%' THEN ROUND(B.StanAmount,2) END),',','\n'),'-') AS
-- 叠拼物业服务费
,IFNULL(REPLACE(group_concat(CASE WHEN B.CostName LIKE '%叠拼%' THEN ROUND(B.StanAmount,2) END),',','\n'),'-') AS
-- 洋房物业费
,IFNULL(REPLACE(group_concat(CASE WHEN B.CostName LIKE '%洋房%' THEN ROUND(B.StanAmount,2) END),',','\n'),'-') AS
-- 公寓物业服务费
,IFNULL(REPLACE(group_concat(CASE WHEN B.CostName LIKE '%公寓%' THEN ROUND(B.StanAmount,2) END),',','\n'),'-') AS
-- 商铺物业服务费
,IFNULL(REPLACE(group_concat(CASE WHEN B.CostName LIKE '%商铺%' THEN ROUND(B.StanAmount,2) END),',','\n'),'-') AS
-- 写字楼物业服务费
,IFNULL(REPLACE(group_concat(CASE WHEN B.CostName LIKE '%写字楼%' THEN ROUND(B.StanAmount,2) END),',','\n'),'-') AS
-- 幼儿园物业服务费
,IFNULL(REPLACE(group_concat(CASE WHEN B.CostName LIKE '%幼儿园%' THEN ROUND(B.StanAmount,2) END),',','\n'),'-') AS
-- 厂区物业服务费
,IFNULL(REPLACE(group_concat(CASE WHEN B.CostName LIKE '%厂区%' THEN ROUND(B.StanAmount,2) END),',','\n'),'-') AS
-- 酒店物业服务费
,IFNULL(REPLACE(group_concat(CASE WHEN B.CostName LIKE '%酒店%' THEN ROUND(B.StanAmount,2) END),',','\n'),'-') AS
-- 车位管理物业服务费
,IFNULL(REPLACE(group_concat(CASE WHEN B.CostName IN('车位管理物业服务费','车位物业服务费') THEN ROUND(B.StanAmount,2) END),',','\n'),'-') AS
-- 车位月租费用
,IFNULL(REPLACE(group_concat(CASE WHEN B.CostName = '车位月租' THEN ROUND(B.StanAmount,2) END),',','\n'),'-') AS
FROM
(
SELECT
DISTINCT
CommID
,CostID
,StanID
FROM dim_bind_cost_stan_detail_d -- 绑定的收费标准明细
-- WHERE CommID = '214330'
)A
LEFT JOIN
(
SELECT
B1.CommID AS CommID
,B1.COSTID AS COSTID
,B1.StanID AS StanID
,B1.StanAmount AS StanAmount
,B2.COSTNAME AS COSTNAME
FROM
(
SELECT
CommID
,COSTID
,StanID
,StanAmount
FROM dim_cost_stand_d -- 小区收费标准
WHERE StanAmount <> 0
)B1
LEFT JOIN
(
SELECT
distinct
COMMID
,COSTID
,COSTNAME
FROM dim_costitem_d -- 项目上的费用名称
)B2
ON B1.CommID = B2.COMMID
AND B1.CostID = B2.COSTID
)B
ON A.CommID = B.COMMID
AND A.CostID = B.COSTID
AND A.StanID = B.StanID
GROUP BY
A.CommId
)G
ON A.COMMID = G.COMMID
;