项目进度报表加列:物料编号、当前工序超时天数、预计完工区间

master
yinq 2 years ago
parent 8874cec5c9
commit 87a60bab94

@ -511,6 +511,7 @@ public class ReportServiceImpl implements ReportService {
for (Map<String, Object> shopOrderMap1 : shopOrderMaps) {
JSONObject map1 = new JSONObject();
map1.put("SFC", shopOrderMap1.get("SFC"));
map1.put("itemCode", shopOrderMap1.get("itemCode"));
map1.put("itemDescription", shopOrderMap1.get("itemDescription"));
map1.put("shopOrderQTY", shopOrderMap1.get("shopOrderQTY"));
map1.put("doneQTY", shopOrderMap1.get("doneQTY"));
@ -518,7 +519,15 @@ public class ReportServiceImpl implements ReportService {
map1.put("currentOperation", shopOrderMap1.get("currentOperation"));
map1.put("nextOperationNum", shopOrderMap1.get("nextOperationNum"));
map1.put("endPlanTime", shopOrderMap1.get("endPlanTime"));
//map1.put("rework", shopOrderMap1.get("rework"));
map1.put("currentTimeoutDay", shopOrderMap1.get("currentTimeoutDay"));
map1.put("estimationRange", shopOrderMap1.get("estimationRange"));
map1.put("isOverTime", shopOrderMap1.get("isOverTime"));
map1.put("rework", shopOrderMap1.get("rework"));
if (String.valueOf(shopOrderMap1.get("isOverTime")).equals("true")){
map1.put("Status", "Error");
}else if (String.valueOf(shopOrderMap1.get("isOverTime")).equals("false")){
map1.put("Status", "Success");
}
if (shopOrderMap1.get("isOverTime").equals("true")) {
map1.put("currentPlanTime", shopOrderMap1.get("currentPlanTime") + "(已超时)");
@ -1055,13 +1064,13 @@ public class ReportServiceImpl implements ReportService {
//比率 计划工时 / 标准产能 * 100
ArrayList<String> rateList = new ArrayList<>();
rateList.add("0.00");
rateList.add(String.format("%.2f", Float.valueOf(String.valueOf(map.get("planCapacity1"))) / Float.valueOf(String.valueOf(Float.valueOf(map.get("standardWeekCapacity")))) * 100));
rateList.add(String.format("%.2f", Float.valueOf(String.valueOf(map.get("planCapacity2"))) / Float.valueOf(String.valueOf(Float.valueOf(map.get("standardWeekCapacity")))) * 100));
rateList.add(String.format("%.2f", Float.valueOf(String.valueOf(map.get("planCapacity3"))) / Float.valueOf(String.valueOf(Float.valueOf(map.get("standardWeekCapacity")))) * 100));
rateList.add(String.format("%.2f", Float.valueOf(String.valueOf(map.get("planCapacity4"))) / Float.valueOf(String.valueOf(Float.valueOf(map.get("standardWeekCapacity")))) * 100));
rateList.add(String.format("%.2f", Float.valueOf(String.valueOf(map.get("planCapacity5"))) / Float.valueOf(String.valueOf(Float.valueOf(map.get("standardWeekCapacity")))) * 100));
rateList.add(String.format("%.2f", Float.valueOf(String.valueOf(map.get("planCapacity6"))) / Float.valueOf(String.valueOf(Float.valueOf(map.get("standardWeekCapacity")))) * 100));
rateList.add(String.format("%.2f", Float.valueOf(String.valueOf(map.get("planCapacity7"))) / Float.valueOf(String.valueOf(Float.valueOf(map.get("standardWeekCapacity")))) * 100));
rateList.add(String.format("%.2f", Float.valueOf(String.valueOf(map.get("planCapacity8"))) / Float.valueOf(String.valueOf(Float.valueOf(map.get("standardWeekCapacity")))) * 100));
resourceMap.put("planCapacityRateList",rateList);
planHoursList.add(Float.valueOf(String.valueOf(map.get("planHours"))));

@ -1147,114 +1147,31 @@
<select id="ProjectScheduleReport" parameterType="java.util.HashMap" resultType="java.util.HashMap">
--项目进度报表
SELECT WIP.item "item",--项目号
WIP.workOrder "workOrder",
WIP.shopOrder "shopOrder",
WIP.SFC "SFC",
WIP.itemDescription "itemDescription",
WIP.shopOrderQTY "shopOrderQTY",
WIP.doneQTY "doneQTY",--已完成数量
CASE
WHEN WIP.shopOrderQTY = WIP.doneQTY THEN '100.00'
ELSE WIP.rate
END
|| '%' "rate",
zsd2.CURRENT_OPERATION "currentOperation",
WIP.nextOperationNum "nextOperationNum",
zsd3.PLANNED_COMP_DATE "currentPlanTime",
WIP.endPlanTime "endPlanTime",
-- WIP.rework "rework",--是否返修工序
CASE
WHEN WIP.nextOperationNum > 0 AND SYSDATE > zsd3.PLANNED_COMP_DATE AND zsd3.DISPATCH_STATUS != 'COMPLETE'
THEN 'true'
WHEN WIP.nextOperationNum = 0 AND WIP.rate != 100.00 AND SYSDATE > zsd3.PLANNED_COMP_DATE AND
zsd3.DISPATCH_STATUS != 'COMPLETE'
THEN 'true'
ELSE 'false' END "isOverTime" --当前工序是否超时
FROM (SELECT cf.VALUE item,--项目号
cf2.VALUE workOrder,--工作令
zsd.SHOP_ORDER shopOrder,--订单编号
zsd.SFC SFC,--SFC
it.DESCRIPTION itemDescription,--物料描述
MIN(zsd.DISPATCH_QTY) shopOrderQTY,--订单数量
MIN(CASE
WHEN zsd.DISPATCH_STATUS = 'COMPLETE' OR zsd.DISPATCH_STATUS = 'CANCEL' THEN
zsd.DISPATCH_QTY
ELSE 0 END) doneQTY, --已完成数量
TO_CHAR(
DECODE(SUM(CASE
WHEN zsd.DISPATCH_STATUS = 'COMPLETE' OR zsd.DISPATCH_STATUS = 'CANCEL' THEN
zsd.PROD_HOURS * zsd.DISPATCH_QTY
ELSE 0 END), 0, 0, SUM(CASE
WHEN zsd.DISPATCH_STATUS = 'COMPLETE' OR zsd.DISPATCH_STATUS = 'CANCEL'
THEN
zsd.PROD_HOURS * zsd.DISPATCH_QTY
ELSE 0 END) / SUM(zsd.PROD_HOURS * zsd.DISPATCH_QTY))
* 100, '99990.99') rate,--进度(工时百分比)
MAX(zsd.ACTUAL_START_DATE) ACTUAL_START_DATE,--最大实际开始时间
SUM(CASE
WHEN zsd.DISPATCH_STATUS != 'COMPLETE' AND zsd.DISPATCH_STATUS != 'CANCEL' THEN 1
ELSE 0 END) nextOperationNum,--剩余工序数量
MAX(zsd.PLANNED_COMP_DATE) endPlanTime,--计划最终交付时间
-- rs.REWORK rework,--是否返修工序
zsd.SITE SITE
FROM Z_SFC_DISPATCH zsd
LEFT JOIN SFC s ON s.SFC = zsd.SFC AND s.SITE = zsd.SITE
LEFT JOIN SHOP_ORDER so ON so.SHOP_ORDER = zsd.SHOP_ORDER AND so.SITE = zsd.SITE
LEFT JOIN CUSTOM_FIELDS cf ON cf.HANDLE = so.HANDLE AND cf."ATTRIBUTE" = 'ITEM_NUMBER'
LEFT JOIN CUSTOM_FIELDS cf2 ON cf2.HANDLE = so.HANDLE AND cf2."ATTRIBUTE" = 'WORK_ORDER'
LEFT JOIN ITEM i On i.HANDLE = so.ITEM_BO AND I.SITE = SO.SITE
LEFT JOIN ITEM_T it ON it.ITEM_BO = so.ITEM_BO AND it.LOCALE = 'zh'
LEFT JOIN ROUTER r ON zsd.ROUTER_BO = R.HANDLE
LEFT JOIN ROUTER_STEP rs ON rs.ROUTER_BO = r.HANDLE AND rs.STEP_ID = zsd.STEP_ID
WHERE zsd.SITE = '1000'
-- AND zsd.DISPATCH_STATUS != 'CANCEL'
AND cf.VALUE IS NOT NULL
AND cf2.VALUE IS NOT NULL
GROUP BY zsd.SITE, cf.VALUE, cf2.VALUE, zsd.SHOP_ORDER, zsd.SFC, it.DESCRIPTION
ORDER BY rate
) WIP
LEFT JOIN (SELECT zsd1.SITE, zsd1.SFC, MAX(zsd1.STEP_ID) STEP_ID, MAX(zsd1.CURRENT_OPERATION) CURRENT_OPERATION
FROM (
SELECT zsd0.SITE, zsd0.SFC, OT.DESCRIPTION CURRENT_OPERATION, ss.STEP_ID
FROM Z_SFC_DISPATCH zsd0
LEFT JOIN SFC s2 ON s2.SFC = zsd0.SFC AND s2.SITE = zsd0.SITE
LEFT JOIN SFC_ROUTING sr ON sr.SFC_BO = s2.HANDLE
LEFT JOIN SFC_ROUTER st ON st.SFC_ROUTING_BO = sr.HANDLE AND st.IN_USE = 'true'
LEFT JOIN SFC_STEP ss ON ss.SFC_ROUTER_BO = st.HANDLE AND
(ss.QTY_IN_QUEUE > 0 OR ss.QTY_IN_WORK > 0)
INNER JOIN OPERATION o
ON ss.OPERATION_BO = 'OperationBO:' || o.SITE || ',' || o.OPERATION || ',#' AND
o.CURRENT_REVISION = 'true' AND o.SITE = zsd0.SITE AND
o.CURRENT_REVISION = 'true'
and zsd0.OPERATION = o.OPERATION
LEFT JOIN OPERATION_T OT ON OT.OPERATION_BO = O.HANDLE AND OT.LOCALE = 'zh') zsd1
GROUP BY zsd1.SITE, zsd1.SFC) zsd2 ON WIP.SFC = zsd2.SFC AND WIP.SITE = zsd2.SITE
LEFT JOIN Z_SFC_DISPATCH zsd3 ON zsd3.SFC = zsd2.SFC AND zsd3.STEP_ID = zsd2.STEP_ID AND zsd3.SITE = zsd2.SITE
SELECT * FROM Project_Schedule_Report WIP
<where>
1=1
<if test="careerKey != null and careerKey != ''">
AND WIP.workOrder like '%${careerKey}%'
AND WIP."workOrder" like '%${careerKey}%'
</if>
<if test="item != null and item != ''">
AND WIP.item like '%${item}%'
AND WIP."item" like '%${item}%'
</if>
<if test="workOrder != null and workOrder != ''">
AND WIP.workOrder like '%${workOrder}%'
AND WIP."workOrder" like '%${workOrder}%'
</if>
<if test="shopOrder != null and shopOrder != ''">
AND WIP.shopOrder like '%${shopOrder}%'
AND WIP."shopOrder" like '%${shopOrder}%'
</if>
<if test="SFC != null and SFC != ''">
AND WIP.SFC like '%${SFC}%'
AND WIP."SFC" like '%${SFC}%'
</if>
<if test="finishedSFC != null and finishedSFC == 'true'">
AND WIP.rate = 100.00
AND WIP."rate" = '100.00%'
</if>
<if test="finishedSFC != null and finishedSFC == 'false'">
AND WIP.rate != 100.00
AND WIP."shopOrderQTY" != WIP."doneQTY"
</if>
</where>
ORDER BY WIP.item,WIP.workOrder,WIP.rate
</select>
<select id="selectCurrentPlanTime" parameterType="java.util.HashMap" resultType="java.util.Map">

Loading…
Cancel
Save