[1375]인증용량 쿼리수정 #401
@ -1824,6 +1824,10 @@ public class EstimateService {
|
|||||||
byte[] excelBytes =
|
byte[] excelBytes =
|
||||||
excelUtil.download(request, response, excelData, excelList, excelTemplateNam);
|
excelUtil.download(request, response, excelData, excelList, excelTemplateNam);
|
||||||
|
|
||||||
|
if (excelBytes == null || excelBytes.length == 0) {
|
||||||
|
throw new RuntimeException("Excel template processing returned empty result. Template: " + excelTemplateNam);
|
||||||
|
}
|
||||||
|
|
||||||
InputStream in = new ByteArrayInputStream(excelBytes);
|
InputStream in = new ByteArrayInputStream(excelBytes);
|
||||||
workbook = WorkbookFactory.create(in); // JXLS POI 엑셀로 재변환
|
workbook = WorkbookFactory.create(in); // JXLS POI 엑셀로 재변환
|
||||||
|
|
||||||
|
|||||||
@ -69,7 +69,8 @@ public class ExcelUtil {
|
|||||||
excelBytes = byteArrayOutputStream.toByteArray();
|
excelBytes = byteArrayOutputStream.toByteArray();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.debug(e.getMessage());
|
log.error("ExcelUtil.download error: {}", e.getMessage(), e);
|
||||||
|
throw new RuntimeException("Excel template processing failed", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return excelBytes;
|
return excelBytes;
|
||||||
@ -118,7 +119,8 @@ public class ExcelUtil {
|
|||||||
JxlsHelper.getInstance().processTemplate(is, os, context);
|
JxlsHelper.getInstance().processTemplate(is, os, context);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.debug(e.getMessage());
|
log.error("ExcelUtil.download error: {}", e.getMessage(), e);
|
||||||
|
throw new RuntimeException("Excel template processing failed", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -396,116 +396,76 @@
|
|||||||
<select id="selectEstimateRoofCertVolKw" parameterType="com.interplug.qcast.biz.estimate.dto.EstimateRequest" resultType="String">
|
<select id="selectEstimateRoofCertVolKw" parameterType="com.interplug.qcast.biz.estimate.dto.EstimateRequest" resultType="String">
|
||||||
/* sqlid : com.interplug.qcast.biz.estimate.selectEstimateRoofCertVolKw */
|
/* sqlid : com.interplug.qcast.biz.estimate.selectEstimateRoofCertVolKw */
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
SELECT
|
;WITH
|
||||||
CAST(
|
CS AS (
|
||||||
SUM(
|
SELECT
|
||||||
CASE
|
cie.CIRCUIT_NO, cie.OBJECT_NO, cie.PLAN_NO,
|
||||||
WHEN (X.M_VOL_KW + X.M_VOL_KW2) < X.PC_VOL_KW THEN (X.M_VOL_KW + X.M_VOL_KW2)
|
cie.ITEM_ID AS CIRCUIT_ITEM_ID, cie.CIRCUIT_CFG,
|
||||||
WHEN X.PC_VOL_KW <= (X.M_VOL_KW + X.M_VOL_KW2) THEN X.PC_VOL_KW
|
(SELECT SUM(CAST(LTRIM(RTRIM(x.X.value('.','VARCHAR(10)'))) AS INT))
|
||||||
ELSE 0
|
FROM (SELECT CAST('<X>'+REPLACE(cie.CIRCUIT_CFG,',','</X><X>')+'</X>' AS XML) AS d) t
|
||||||
END
|
CROSS APPLY t.d.nodes('/X') AS x(X)
|
||||||
) AS DECIMAL(18,3)
|
) AS CIRCUIT_SUM
|
||||||
) AS CERT_VOL_KW
|
FROM T_PART_CIRCUIT_ITEM_ESTIMATE cie
|
||||||
FROM (
|
WHERE cie.OBJECT_NO = #{objectNo} AND cie.PLAN_NO = #{planNo}
|
||||||
SELECT DISTINCT
|
AND cie.CIRCUIT_CFG IS NOT NULL
|
||||||
Y.M_ITEM_ID,
|
),
|
||||||
Y.M_SPEC,
|
CC AS (
|
||||||
(Y.M_AMT2 - Y.M_AMT) AS M_CNT,
|
SELECT cs.*,
|
||||||
ROUND((Y.M_AMT * CAST(ISNULL(Y.M_SPEC, 0) AS FLOAT) / 1000), 4) AS M_VOL,
|
ISNULL((SELECT SUM(c2.CIRCUIT_SUM) FROM CS c2
|
||||||
ROUND((Y.M_AMT2 * CAST(ISNULL(Y.M_SPEC, 0) AS FLOAT) / 1000), 4) AS M_VOL2,
|
WHERE c2.OBJECT_NO=cs.OBJECT_NO AND c2.PLAN_NO=cs.PLAN_NO
|
||||||
ROUND(((Y.M_AMT2 - Y.M_AMT) * CAST(ISNULL(Y.M_SPEC, 0) AS FLOAT) / 1000), 4) AS R_VOL,
|
AND c2.CIRCUIT_NO < cs.CIRCUIT_NO), 0) AS CUM_START,
|
||||||
CASE
|
ISNULL((SELECT SUM(c2.CIRCUIT_SUM) FROM CS c2
|
||||||
WHEN Y.M_AMT < Y.M_AMT2
|
WHERE c2.OBJECT_NO=cs.OBJECT_NO AND c2.PLAN_NO=cs.PLAN_NO
|
||||||
THEN ROUND((Y.M_AMT * CAST(ISNULL(Y.M_SPEC, 0) AS FLOAT) / 1000), 4)
|
AND c2.CIRCUIT_NO <= cs.CIRCUIT_NO), 0) AS CUM_END
|
||||||
ELSE
|
FROM CS cs
|
||||||
ROUND((Y.M_AMT2 * CAST(ISNULL(Y.M_SPEC, 0) AS FLOAT) / 1000), 4)
|
),
|
||||||
END AS M_VOL_KW,
|
RC AS (
|
||||||
ROUND((Y.P_AMT * CAST(ISNULL(Y.P_SPEC, 0) AS FLOAT) / 1000), 4) AS PC_VOL_KW,
|
SELECT
|
||||||
CASE
|
rie.ROOF_ITEM_NO, rie.ROOF_SURFACE_ID, rie.OBJECT_NO, rie.PLAN_NO,
|
||||||
WHEN 0 < (Y.M_AMT2 - Y.M_AMT)
|
rie.ITEM_ID AS ROOF_ITEM_ID, rie.ITEM_NAME,
|
||||||
THEN ROUND(((Y.M_AMT2 - Y.M_AMT) * CAST(ISNULL(Y.M_SPEC2, 0) AS FLOAT) / 1000), 4)
|
CAST(rie.SPECIFICATION AS FLOAT) AS SPEC, rie.AMOUNT, rie.PC_ITEM_ID,
|
||||||
ELSE 0
|
ISNULL((SELECT SUM(r2.AMOUNT) FROM T_PART_ROOF_ITEM_ESTIMATE r2
|
||||||
END AS M_VOL_KW2
|
WHERE r2.OBJECT_NO=rie.OBJECT_NO AND r2.PLAN_NO=rie.PLAN_NO
|
||||||
FROM (
|
AND r2.ROOF_SURFACE_ID=rie.ROOF_SURFACE_ID
|
||||||
SELECT
|
AND r2.ROOF_ITEM_NO < rie.ROOF_ITEM_NO), 0) AS CUM_START,
|
||||||
ZC.ROOF_ITEM_NO,
|
ISNULL((SELECT SUM(r2.AMOUNT) FROM T_PART_ROOF_ITEM_ESTIMATE r2
|
||||||
ZC.M_ITEM_ID,
|
WHERE r2.OBJECT_NO=rie.OBJECT_NO AND r2.PLAN_NO=rie.PLAN_NO
|
||||||
ZC.M_SPEC,
|
AND r2.ROOF_SURFACE_ID=rie.ROOF_SURFACE_ID
|
||||||
ZC.M_AMT,
|
AND r2.ROOF_ITEM_NO <= rie.ROOF_ITEM_NO), 0) AS CUM_END
|
||||||
(ZC.M_1 + ZC.M_2 + ZC.M_3) AS M_AMT2,
|
FROM T_PART_ROOF_ITEM_ESTIMATE rie
|
||||||
ZC.P_ITEM_ID,
|
WHERE rie.OBJECT_NO = #{objectNo} AND rie.PLAN_NO = #{planNo}
|
||||||
ZC.P_AMT,
|
),
|
||||||
ZC.PC_ITEM_ID,
|
ALLOC AS (
|
||||||
ZC.QCAST_CUST_PRD_ID,
|
SELECT
|
||||||
CASE
|
cc.CIRCUIT_NO, cc.CIRCUIT_ITEM_ID, cc.CIRCUIT_CFG, cc.CIRCUIT_SUM,
|
||||||
WHEN ZC.P_SPEC != '0' THEN P_SPEC
|
rc.ROOF_ITEM_NO, rc.ROOF_ITEM_ID, rc.SPEC, rc.PC_ITEM_ID,
|
||||||
WHEN ZC.CUST_SPEC != '0' THEN CUST_SPEC
|
-- 할당량 = MIN(끝,끝) - MAX(시작,시작)
|
||||||
WHEN ZC.PC_SPEC != '0' THEN PC_SPEC
|
CASE WHEN cc.CUM_END < rc.CUM_END THEN cc.CUM_END ELSE rc.CUM_END END
|
||||||
ELSE '0'
|
- CASE WHEN cc.CUM_START > rc.CUM_START THEN cc.CUM_START ELSE rc.CUM_START END AS ALLOCATED_QTY
|
||||||
END AS P_SPEC,
|
FROM CC cc
|
||||||
(SELECT SPECIFICATION
|
INNER JOIN RC rc ON cc.OBJECT_NO = rc.OBJECT_NO AND cc.PLAN_NO = rc.PLAN_NO
|
||||||
FROM T_PART_ROOF_ITEM_ESTIMATE
|
WHERE cc.CUM_START < rc.CUM_END AND cc.CUM_END > rc.CUM_START
|
||||||
WHERE OBJECT_NO = ZC.OBJECT_NO
|
),
|
||||||
AND PLAN_NO = ZC.PLAN_NO
|
DETAIL AS (
|
||||||
AND ROOF_ITEM_NO = (ZC.ROOF_ITEM_NO + 1)) AS M_SPEC2
|
SELECT
|
||||||
FROM (
|
a.CIRCUIT_NO, a.CIRCUIT_ITEM_ID, a.CIRCUIT_CFG, a.CIRCUIT_SUM,
|
||||||
SELECT
|
a.ROOF_ITEM_NO, a.ROOF_ITEM_ID, a.ALLOCATED_QTY,
|
||||||
Z.*,
|
ROUND(a.SPEC, 3) * a.ALLOCATED_QTY AS SPEC_X_QTY,
|
||||||
CAST(ISNULL(SPLIT.M_1, 0) AS INT) AS M_1,
|
(SELECT mi.PNOW_W FROM M_ITEM mi WHERE mi.ITEM_ID = a.CIRCUIT_ITEM_ID) AS PNOW_W
|
||||||
CAST(ISNULL(SPLIT.M_2, 0) AS INT) AS M_2,
|
FROM ALLOC a
|
||||||
CAST(ISNULL(SPLIT.M_3, 0) AS INT) AS M_3
|
),
|
||||||
FROM (
|
CIRCUIT_AGG AS (
|
||||||
SELECT
|
SELECT
|
||||||
TRI.ROOF_ITEM_NO,
|
CIRCUIT_NO, CIRCUIT_ITEM_ID, CIRCUIT_CFG, CIRCUIT_SUM,
|
||||||
TRI.OBJECT_NO,
|
SUM(SPEC_X_QTY) AS SUM_SPEC_X_QTY, PNOW_W,
|
||||||
TRI.PLAN_NO,
|
CASE WHEN SUM(SPEC_X_QTY) <= PNOW_W THEN SUM(SPEC_X_QTY) ELSE PNOW_W END AS MIN_VALUE
|
||||||
TRI.ITEM_ID AS M_ITEM_ID,
|
FROM DETAIL
|
||||||
TRI.ITEM_NO,
|
GROUP BY CIRCUIT_NO, CIRCUIT_ITEM_ID, CIRCUIT_CFG, CIRCUIT_SUM, PNOW_W
|
||||||
TRI.SPECIFICATION AS M_SPEC,
|
)
|
||||||
TRI.AMOUNT AS M_AMT,
|
|
||||||
TCI.ITEM_ID AS P_ITEM_ID,
|
SELECT ROUND((SUM(MIN_VALUE) / 1000), 4) AS CERT_VOL_KW
|
||||||
TRI.PC_ITEM_ID,
|
FROM CIRCUIT_AGG
|
||||||
TRI.QCAST_CUST_PRD_ID,
|
|
||||||
TCI.P_AMT,
|
|
||||||
(SELECT ISNULL(M.PNOW_W,0) FROM M_ITEM M WHERE M.ITEM_ID = TCI.ITEM_ID) AS P_SPEC,
|
|
||||||
(SELECT ISNULL(M.PNOW_W,0) FROM M_ITEM M WHERE M.ITEM_ID = TRI.PC_ITEM_ID) AS PC_SPEC,
|
|
||||||
(SELECT ISNULL(M.PNOW_W,0) FROM M_ITEM M WHERE M.ITEM_ID = TRI.QCAST_CUST_PRD_ID) AS CUST_SPEC,
|
|
||||||
TCI.CIRCUIT_CFG
|
|
||||||
FROM T_PART_ROOF_ITEM_ESTIMATE TRI
|
|
||||||
INNER JOIN (
|
|
||||||
SELECT
|
|
||||||
TI.CIRCUIT_NO,
|
|
||||||
TI.OBJECT_NO,
|
|
||||||
TI.PLAN_NO,
|
|
||||||
TI.ITEM_ID,
|
|
||||||
TI.CIRCUIT_CFG,
|
|
||||||
COUNT(*) AS P_AMT
|
|
||||||
FROM T_PART_CIRCUIT_ITEM_ESTIMATE TI
|
|
||||||
GROUP BY TI.CIRCUIT_NO, TI.OBJECT_NO, TI.PLAN_NO, TI.ITEM_ID, TI.CIRCUIT_CFG
|
|
||||||
) TCI
|
|
||||||
ON TRI.ROOF_ITEM_NO = TCI.CIRCUIT_NO
|
|
||||||
AND TRI.OBJECT_NO = TCI.OBJECT_NO
|
|
||||||
AND TRI.PLAN_NO = TCI.PLAN_NO
|
|
||||||
WHERE
|
|
||||||
TRI.OBJECT_NO = #{objectNo}
|
|
||||||
AND TRI.PLAN_NO = #{planNo}
|
|
||||||
) Z
|
|
||||||
CROSS APPLY (
|
|
||||||
SELECT
|
|
||||||
X.value('(/x[1]/v[1])[1]', 'VARCHAR(50)') AS M_1,
|
|
||||||
X.value('(/x[1]/v[2])[1]', 'VARCHAR(50)') AS M_2,
|
|
||||||
X.value('(/x[1]/v[3])[1]', 'VARCHAR(50)') AS M_3
|
|
||||||
FROM (
|
|
||||||
SELECT CAST('<x><v>' + REPLACE(ISNULL(Z.CIRCUIT_CFG, ''), ',', '</v><v>') + '</v></x>' AS XML)
|
|
||||||
) A(X)
|
|
||||||
) SPLIT
|
|
||||||
) ZC
|
|
||||||
INNER JOIN T_PART_ESTIMATE TE
|
|
||||||
ON ZC.OBJECT_NO = TE.OBJECT_NO
|
|
||||||
AND ZC.PLAN_NO = TE.PLAN_NO
|
|
||||||
AND TE.ITEM_ID IN (ZC.P_ITEM_ID, ZC.PC_ITEM_ID, ZC.QCAST_CUST_PRD_ID)
|
|
||||||
) Y
|
|
||||||
) X
|
|
||||||
]]>
|
]]>
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user