|
|
@@ -32,90 +32,114 @@ public class mouldproduceplan : IHttpHandler, IReadOnlySessionState
|
|
|
try
|
|
|
{
|
|
|
string sqlStr = @"WITH date_range AS (
|
|
|
- SELECT
|
|
|
- MIN(begintime) AS min_date,
|
|
|
- MAX(endtime) AS max_date
|
|
|
- FROM tp_pm_production_plan
|
|
|
- WHERE valueflag = 1
|
|
|
- )
|
|
|
- SELECT
|
|
|
- pp.planid,
|
|
|
- pp.goodsid,
|
|
|
- pp.logoid,
|
|
|
- l.logoname AS 商标名称,
|
|
|
- pp.goodscode AS 产品型号,
|
|
|
- SUBSTR(pb.name, INSTR(pb.name, 'H', 1)) AS 产品变更型号,
|
|
|
- g.goodsname AS 产品名称,
|
|
|
- g.goodsspecification AS 出水距,
|
|
|
- pp.materialcode AS 物料编码,
|
|
|
- pp.quantity AS 计划数量,
|
|
|
- pp.begintime AS 开始时间,
|
|
|
- pp.endtime AS 截止时间,
|
|
|
- CASE pp.controlrange
|
|
|
- WHEN 1 THEN '装配'
|
|
|
- WHEN 2 THEN '包装'
|
|
|
- END AS 控制范围,
|
|
|
- -- 包装数量(优化后的相关子查询)
|
|
|
- (SELECT COUNT(DISTINCT fp.barcode)
|
|
|
- FROM tp_pm_finishedproduct fp
|
|
|
- WHERE fp.goodsid = pp.goodsid
|
|
|
- AND fp.logoid = pp.logoid
|
|
|
- AND fp.createtime >= pp.begintime
|
|
|
- AND fp.createtime < pp.endtime
|
|
|
- AND fp.valueflag = 1) AS 包装数量,
|
|
|
- -- 商标切换统计(优化后的相关子查询)
|
|
|
- (SELECT COUNT(DISTINCT lc.barcode)
|
|
|
- FROM date_range dr,
|
|
|
- tp_pm_logochangedrecord lc
|
|
|
- INNER JOIN tp_pm_groutingdailydetail gdd ON gdd.barcode = lc.barcode
|
|
|
- INNER JOIN tp_pc_procedure p ON lc.procedureid = p.procedureid
|
|
|
- WHERE lc.createtime >= dr.min_date
|
|
|
- AND lc.createtime < dr.max_date
|
|
|
- AND gdd.goodsid = pp.goodsid
|
|
|
- AND gdd.logoid = pp.logoid
|
|
|
- AND lc.newlogoid = pp.logoid
|
|
|
- AND lc.createtime >= pp.begintime
|
|
|
- AND lc.createtime < pp.endtime
|
|
|
- AND lc.oldlogoid <> lc.newlogoid
|
|
|
- AND (p.modeltype = '-5' OR p.procedureid IN (106, 107, 78))
|
|
|
- AND NOT EXISTS (
|
|
|
- SELECT 1
|
|
|
- FROM tp_pm_scrapproduct s
|
|
|
- WHERE s.barcode = lc.barcode
|
|
|
- AND s.valueflag = 1
|
|
|
- AND s.createtime >= lc.createtime
|
|
|
- )) AS 实际切换商标数量,
|
|
|
- (SELECT COUNT(DISTINCT lc.barcode)
|
|
|
- FROM date_range dr,
|
|
|
- tp_pm_logochangedrecord lc
|
|
|
- INNER JOIN tp_pm_groutingdailydetail gdd ON gdd.barcode = lc.barcode
|
|
|
- INNER JOIN tp_pc_procedure p ON lc.procedureid = p.procedureid
|
|
|
- WHERE lc.createtime >= dr.min_date
|
|
|
- AND lc.createtime < dr.max_date
|
|
|
- AND gdd.goodsid = pp.goodsid
|
|
|
- AND gdd.logoid = pp.logoid
|
|
|
- AND lc.newlogoid = pp.logoid
|
|
|
- AND lc.createtime >= pp.begintime
|
|
|
- AND lc.createtime < pp.endtime
|
|
|
- AND lc.oldlogoid <> lc.newlogoid
|
|
|
- AND ((pp.controlrange = 1 AND p.modeltype = '-5' AND p.procedureid NOT IN (126, 152))
|
|
|
- OR (pp.controlrange = 2 AND p.procedureid IN (106, 107, 78, 126, 152)))
|
|
|
- AND NOT EXISTS (
|
|
|
- SELECT 1
|
|
|
- FROM tp_pm_scrapproduct s
|
|
|
- WHERE s.barcode = lc.barcode
|
|
|
- AND s.valueflag = 1
|
|
|
- AND s.createtime >= lc.createtime
|
|
|
- )) AS 范围内切换商标数量
|
|
|
- FROM tp_pm_production_plan pp
|
|
|
- LEFT JOIN TP_MST_LOGO L ON PP.LOGOID = L.LOGOID
|
|
|
- LEFT JOIN TP_MST_GOODS G ON G.GOODSID = PP.GOODSID
|
|
|
- LEFT JOIN TP_MST_PACKINGBOM PB ON PB.MATNR = PP.MATERIALCODE
|
|
|
- WHERE PP.VALUEFLAG = 1 ";
|
|
|
+ SELECT
|
|
|
+ MIN(begintime) AS min_date,
|
|
|
+ MAX(endtime) AS max_date
|
|
|
+ FROM tp_pm_production_plan
|
|
|
+ WHERE valueflag = 1
|
|
|
+ )
|
|
|
+ SELECT t.planid,
|
|
|
+ t.goodsid,
|
|
|
+ t.logoid,
|
|
|
+ t.商标名称,
|
|
|
+ t.产品型号,
|
|
|
+ t.产品变更型号,
|
|
|
+ t.产品名称,
|
|
|
+ t.出水距,
|
|
|
+ t.物料编码,
|
|
|
+ t.计划数量,
|
|
|
+ t.开始时间,
|
|
|
+ t.截止时间,
|
|
|
+ t.控制范围,
|
|
|
+ t.顺序,
|
|
|
+ t.包装数量,
|
|
|
+ t.实际切换商标数量,
|
|
|
+ t.范围内切换商标数量,
|
|
|
+ t.计划数量-t.范围内切换商标数量 as 范围差异数量,
|
|
|
+ DECODE( NVL( t.范围内切换商标数量, 0 ), 0, '0%', TO_CHAR( ( NVL( t.范围内切换商标数量, 0 ) / DECODE( NVL( t.计划数量, 1 ), 0, 1, NVL( t.计划数量, 1 ) ) ) * 100, 'fm9990.0' ) || '%' ) AS 范围达成率,
|
|
|
+ t.计划数量-t.实际切换商标数量 as 实际差异数量,
|
|
|
+ DECODE( NVL( t.实际切换商标数量, 0 ), 0, '0%', TO_CHAR( ( NVL( t.实际切换商标数量, 0 ) / DECODE( NVL( t.计划数量, 1 ), 0, 1, NVL( t.计划数量, 1 ) ) ) * 100, 'fm9990.0' ) || '%' ) AS 实际达成率
|
|
|
+FROM (
|
|
|
+ SELECT
|
|
|
+ pp.planid,
|
|
|
+ pp.goodsid,
|
|
|
+ pp.logoid,
|
|
|
+ l.logoname AS 商标名称,
|
|
|
+ pp.goodscode AS 产品型号,
|
|
|
+ SUBSTR(pb.name, INSTR(pb.name, 'H', 1)) AS 产品变更型号,
|
|
|
+ g.goodsname AS 产品名称,
|
|
|
+ g.goodsspecification AS 出水距,
|
|
|
+ pp.materialcode AS 物料编码,
|
|
|
+ pp.quantity AS 计划数量,
|
|
|
+ pp.begintime AS 开始时间,
|
|
|
+ pp.endtime AS 截止时间,
|
|
|
+ CASE pp.controlrange
|
|
|
+ WHEN 1 THEN '装配'
|
|
|
+ WHEN 2 THEN '包装'
|
|
|
+ END AS 控制范围,
|
|
|
+ pp.xuhao as 顺序,
|
|
|
+ -- 包装数量(优化后的相关子查询)
|
|
|
+ (SELECT COUNT(DISTINCT fp.barcode)
|
|
|
+ FROM tp_pm_finishedproduct fp
|
|
|
+ WHERE fp.goodsid = pp.goodsid
|
|
|
+ AND fp.logoid = pp.logoid
|
|
|
+ AND fp.createtime >= pp.begintime
|
|
|
+ AND fp.createtime < pp.endtime
|
|
|
+ AND fp.valueflag = 1) AS 包装数量,
|
|
|
+ -- 商标切换统计(优化后的相关子查询)
|
|
|
+ (SELECT COUNT(DISTINCT lc.barcode)
|
|
|
+ FROM date_range dr,
|
|
|
+ tp_pm_logochangedrecord lc
|
|
|
+ INNER JOIN tp_pm_groutingdailydetail gdd ON gdd.barcode = lc.barcode
|
|
|
+ INNER JOIN tp_pc_procedure p ON lc.procedureid = p.procedureid
|
|
|
+ WHERE lc.createtime >= dr.min_date
|
|
|
+ AND lc.createtime < dr.max_date
|
|
|
+ AND gdd.goodsid = pp.goodsid
|
|
|
+ AND gdd.logoid = pp.logoid
|
|
|
+ AND lc.newlogoid = pp.logoid
|
|
|
+ AND lc.createtime >= pp.begintime
|
|
|
+ AND lc.createtime < pp.endtime
|
|
|
+ AND lc.oldlogoid <> lc.newlogoid
|
|
|
+ AND (p.modeltype = '-5' OR p.procedureid IN (106, 107, 78))
|
|
|
+ AND NOT EXISTS (
|
|
|
+ SELECT 1
|
|
|
+ FROM tp_pm_scrapproduct s
|
|
|
+ WHERE s.barcode = lc.barcode
|
|
|
+ AND s.valueflag = 1
|
|
|
+ AND s.createtime >= lc.createtime
|
|
|
+ )) AS 实际切换商标数量,
|
|
|
+ (SELECT COUNT(DISTINCT lc.barcode)
|
|
|
+ FROM date_range dr,
|
|
|
+ tp_pm_logochangedrecord lc
|
|
|
+ INNER JOIN tp_pm_groutingdailydetail gdd ON gdd.barcode = lc.barcode
|
|
|
+ INNER JOIN tp_pc_procedure p ON lc.procedureid = p.procedureid
|
|
|
+ WHERE lc.createtime >= dr.min_date
|
|
|
+ AND lc.createtime < dr.max_date
|
|
|
+ AND gdd.goodsid = pp.goodsid
|
|
|
+ AND gdd.logoid = pp.logoid
|
|
|
+ AND lc.newlogoid = pp.logoid
|
|
|
+ AND lc.createtime >= pp.begintime
|
|
|
+ AND lc.createtime < pp.endtime
|
|
|
+ AND lc.oldlogoid <> lc.newlogoid
|
|
|
+ AND ((pp.controlrange = 1 AND p.modeltype = '-5' AND p.procedureid NOT IN (126, 152))
|
|
|
+ OR (pp.controlrange = 2 AND p.procedureid IN (106, 107, 78, 126, 152)))
|
|
|
+ AND NOT EXISTS (
|
|
|
+ SELECT 1
|
|
|
+ FROM tp_pm_scrapproduct s
|
|
|
+ WHERE s.barcode = lc.barcode
|
|
|
+ AND s.valueflag = 1
|
|
|
+ AND s.createtime >= lc.createtime
|
|
|
+ )) AS 范围内切换商标数量
|
|
|
+ FROM tp_pm_production_plan pp
|
|
|
+ LEFT JOIN TP_MST_LOGO L ON PP.LOGOID = L.LOGOID
|
|
|
+ LEFT JOIN TP_MST_GOODS G ON G.GOODSID = PP.GOODSID
|
|
|
+ LEFT JOIN TP_MST_PACKINGBOM PB ON PB.MATNR = PP.MATERIALCODE
|
|
|
+ WHERE PP.VALUEFLAG = 1 ";
|
|
|
if (!string.IsNullOrEmpty(GOODSID))
|
|
|
{
|
|
|
sqlStr += " AND PP.GOODSID in (" + GOODSID + ")";
|
|
|
}
|
|
|
+ sqlStr += " ) t order by t.产品名称,t.顺序";
|
|
|
List<CDAParameter> sqlPara = new List<CDAParameter>();
|
|
|
//sqlPara.Add(new CDAParameter("BEGINTIME", BEGINTIME));
|
|
|
//sqlPara.Add(new CDAParameter("ENDTIME",ENDTIME));
|