package com.steering.pss.plnsaleord.planStove;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import com.steering.comm.db.DBCommon;
import com.steering.pss.plnsaleord.base.PlnHelper;
import com.steering.pss.plnsaleord.processOrder.entity.PlnOrderDbkSEntity;
import com.steering.pss.plnsaleord.stove.entity.*;
import com.steering.pss.plnsaleord.planStove.entity.QcmZgJugdeApplyEntity;

import CoreFS.SC01.CoreConstantData;

/**
 * 自动生成实际炉计划
 * @author peng
 */
public class AutoGenerteActPlanStove extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private MyThread myThread;

    public AutoGenerteActPlanStove() {
    }

    public void init() {
        String str = null;
        if (str == null && myThread == null) {
            myThread = new MyThread();
            myThread.start(); // servlet 上下文初始化时启动 socket
        }
    }

    public void doGet(HttpServletRequest httpservletrequest,
            HttpServletResponse httpservletresponse) throws ServletException,
            IOException {
    }

    public void destory() {
        if (myThread != null && myThread.isInterrupted()) {
            myThread.interrupt();
        }
    }

}

class MyThread extends Thread {
    public void run() {
        while (!this.isInterrupted()) {// 线程未中断执行循环
            try {
                // 6小时执行一次
                Thread.sleep(5 * 60 * 1000);
            }
            catch (InterruptedException e) {
                e.printStackTrace();
            }
            GeneratePlanStoveE generatePlanStoveE = new GeneratePlanStoveE();
            generatePlanStoveE.generatePlanStove();
        }
    }
}

/**
 * 生成镦拔扩实际炉计划
 * @author peng
 */
class GeneratePlanStoveE extends DBCommon {

    public void generatePlanStove() {
        Connection con = null;
        String upSql = "AND T.VALIDFLAG='20' AND (T.IF_SET_ZY_PLAN='0' OR T.IF_SET_ZY_PLAN IS NULL) ORDER BY JUDGE_RESULT_TIME";//
        // AND
        // String upSql = " AND T.JUDGE_STOVE_NO='065037' ";
        try {
            /**
             * 1查询钢管申请判定表 已判定且未处理后工序的记录
             */
            con = this.getDao(CoreConstantData.sysbeanstr).getConnection();
            con.setAutoCommit(false);
            List<QcmZgJugdeApplyEntity> appEntityList = PlnHelper
                    .getEntityDatas(con, new String[] {},
                            "GeneratePlanStoveE.getQcmZgJugdeApply", upSql,
                            QcmZgJugdeApplyEntity.class);

            if (appEntityList == null || appEntityList.size() == 0) {
                return;
            }

            /**
             * 2.验证钢管申请判定表
             */
            for (QcmZgJugdeApplyEntity appEntity : appEntityList) {
                int num = 0;// 支数
                if (!appEntity.getActCount().equals("")) {
                    num = Integer.parseInt(appEntity.getActCount());
                }
                double wgt = 0;// 重量 (如果实重为空则取理论重量)
                if (!appEntity.getActWeight().equals("")) {
                    wgt = Double.parseDouble(appEntity.getActWeight());
                }
                else {
                    if (!appEntity.getActTheoryWeight().equals("")) {
                        wgt = Double
                                .parseDouble(appEntity.getActTheoryWeight());
                    }
                }
                // 如果支数和重量都等于0
                if (num <= 0 || wgt <= 0) {
                    continue;
                }
                // 2.1 查询库存数据的序号
                List<String> matNoList = PlnHelper.getParams(con,
                        "GeneratePlanStoveE.queryMatZcMNo", "", new String[] {
                                appEntity.getJugdeApplyCode(),
                                appEntity.getJudgeStoveNo(),
                                appEntity.getBatchNo(),
                                appEntity.getBatchGroudNo(),
                                appEntity.getQualityGroup(),
                                appEntity.getMatGowhereCode() }, "MAT_NO");
                // 库存数据与判定数据记录不一致
                if (matNoList.size() != num) {
                    return;
                }

                // 2.2 通过轧管订单编号 查询镦拔扩排产
                String proPlanIdD = appEntity.getProOrderId();// 轧管订单编号
                String judgeStoveNo = appEntity.getJudgeStoveNo();// 炉号
                List<PlnOrderDbkSEntity> dbksEntityList = PlnHelper
                        .getEntityDatas(con, new String[] { proPlanIdD },
                                "GeneratePlanStoveE.getPlnOrderDbkSEntity",
                                PlnOrderDbkSEntity.class);
                if (dbksEntityList == null || dbksEntityList.size() == 0) {
                    continue;
                }
                // 用于保存已经使用的材料号
                List<String> matNoList1 = new ArrayList<String>();

                /**
                 * 3. 所有虚拟炉计划集合
                 */
                // List<PlnZyDbkReadyEntity> allRealList = new
                // ArrayList<PlnZyDbkReadyEntity>();
                // for (PlnOrderDbkSEntity dbksEntity : dbksEntityList) {
                // String proPlanIdE = dbksEntity.getProPlanId();// 镦拔扩订单编号
                // String gxPlanNo = dbksEntity.getGxPlanNo();// 排产序号
                // // 3.通过镦拔扩订单编号、排产序号以及炉号查询虚拟炉计划
                // String supSql =
                // " AND T.PRO_PLAN_ID=? AND T.GX_PLAN_NO=? AND T.JUDGE_STOVE_NO=?";
                // List<PlnZyDbkReadyEntity> reaEntityList = PlnHelper
                // .getEntityDatas(
                // con,
                // new String[] { proPlanIdE, gxPlanNo,
                // judgeStoveNo },
                // "GeneratePlanStoveE.getPlnZyDbkReadyEntity",
                // supSql, PlnZyDbkReadyEntity.class);
                // if (reaEntityList == null || reaEntityList.size() == 0) {
                // continue;
                // }
                // for (PlnZyDbkReadyEntity reaEntity : reaEntityList) {
                // allRealList.add(reaEntity);
                // }
                // }

                // 如果没有虚拟炉计划
                // if (allRealList.size() == 0) {
                // continue;
                // }

                // 查询仓库编码与仓库号
                String[] storgeArr = PlnHelper.getArray(con,
                        "GeneratePlanStoveE.getStorageNo", new String[] {
                                appEntity.getJugdeApplyCode(),
                                appEntity.getJudgeStoveNo(),
                                appEntity.getBatchNo(),
                                appEntity.getBatchGroudNo(),
                                appEntity.getQualityGroup(),
                                appEntity.getMatGowhereCode() }, new String[] {
                                "STORAGE_NO", "STORAGE_NAME" });
                /**
                 * 4.生成实际炉计划
                 */
                // 4.1生成最大炉次ID
                SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
                String nowTime = df.format(new Date());// 当前时间
                int maxNum = Integer.parseInt(PlnHelper.getParam(con,
                        "FrmMaterialChoose.getMaxHeatPlanNoE", "",
                        new String[] { nowTime }, "HEAT_PLAN_NO"));// 炉号最大序号

                // 4.2生成镦拔扩实际炉计划
                // for (int i = 0; i < allRealList.size(); i++) {
                // PlnZyDbkReadyEntity reaEntity = allRealList.get(i);
                // int allowNum = Integer.parseInt(reaEntity.getAllotNum());//
                // 分配支数
                // double allowWgt = Double
                // .parseDouble(reaEntity.getAllotWt());// 分配重量
                //
                // int realNum = 0;// 实际分配支数
                // if (!reaEntity.getRealAllotNum().equals("")) {
                // realNum = Integer.parseInt(reaEntity.getRealAllotNum());
                // }
                // double readlWgt = 0;// 实际分配重量
                // if (!reaEntity.getRealAllotWt().equals("")) {
                // readlWgt = Double.parseDouble(reaEntity
                // .getRealAllotWt());
                // }
                // if (allowWgt - readlWgt <= 0) {
                // continue;
                // }
                //
                // // 4.3 用于此虚拟炉计划的排产
                // PlnOrderDbkSEntity fitEntiy = GeneratePlanStoveE.fiterDbks(
                // dbksEntityList, reaEntity.getProPlanId(),
                // reaEntity.getGxPlanNo());// 肯定不为NULL
                //
                // String heatPlanNo = "E" + nowTime
                // + String.format("%04d", maxNum);// 炉次ID
                // maxNum++;
                // // 4.4生成实际炉计划实体类
                // PlnZyDbkMEntity zyEntity = new PlnZyDbkMEntity();
                // BeanUtils.copyProperties(zyEntity, fitEntiy);// 复制 数据
                // zyEntity.setHeatPlanNo(heatPlanNo);// 炉计划ID
                // zyEntity.setHeatnoLast(judgeStoveNo);// 炉号
                // zyEntity.setZgBatchNo(appEntity.getBatchNo());// 批号
                // zyEntity.setBatchGroudNo(appEntity.getBatchGroudNo());// 组号
                // zyEntity.setIfWlMatched("0");// 是否挂料确定
                // zyEntity.setCreateName("SYSTEM");// 创建人
                // zyEntity.setPlanstatus("1");// 计划状态
                // zyEntity.setAimlength(fitEntiy.getAimlength());// 长度
                // zyEntity.setAimoutdiameter(fitEntiy.getAimoutdiameter());//
                // 外径
                // zyEntity.setAimwallthick(fitEntiy.getAimwallthick());// 壁厚
                // zyEntity.setLenCutend(fitEntiy.getLenCutend());// 切尾
                // zyEntity.setLenCuthead(fitEntiy.getLenCuthead());// 切头
                // zyEntity.setReadyPlanNo(reaEntity.getReadyPlanNo());// 预排序号
                // zyEntity.setJugdeApplyCode(appEntity.getJugdeApplyCode());//
                // 申请判定单号
                // zyEntity.setQualityGroup(appEntity.getQualityGroup());//
                // 质量分组号
                // zyEntity.setMatGowhereCode(appEntity.getMatGowhereCode());//
                // 材料去向
                // if (storgeArr != null && storgeArr.length > 0) {
                // zyEntity.setStorageNo1(storgeArr[0]);// 仓库编码
                // zyEntity.setStorageName1(storgeArr[1]);// 仓库名称
                // }
                // String proIndex = PlnHelper.getParam(con,
                // "FrmMaterialChoose.getProdIndexE",
                // new String[] { zyEntity.getZyBatchId() },
                // "PROD_INDEX");//
                // zyEntity.setProdIndex(proIndex);// 批次生产序号
                // // 4.5 如果 最后一个虚拟炉计划,则全部分配给这个虚拟炉计划
                // if ((i + 1) == allRealList.size()
                // || wgt < allowWgt - readlWgt) {
                //
                // // 4.5.1 修改虚拟炉计划
                // PlnHelper.deleteOrUpdate(
                // con,
                // "GeneratePlanStoveE.updatePlnZyDbkReady",
                // "",
                // new Object[] { num, wgt,
                // reaEntity.getProPlanId(),
                // reaEntity.getGxPlanNo(),
                // reaEntity.getReadyPlanNo() });
                //
                // // 4.5.2 新增实际炉计划
                // zyEntity.setInNum(String.valueOf(num));// 计划投入支数
                // zyEntity.setInWt(String.valueOf(wgt));// 计划投入重量
                // PlnHelper.addEntityData(con,
                // "GeneratePlanStoveE.addPlnZyDbkReadyEntity",
                // zyEntity);
                // // 4.5.3修改库存数据
                // List<Object[]> paramsList = new ArrayList<Object[]>();
                // for (String matNo : matNoList) {
                // if (paramsList.size() > num) {
                // break;
                // }
                // if (!matNoList1.contains(matNo)) {
                // Object[] objArr = new Object[] { "80150103",
                // heatPlanNo, reaEntity.getProPlanId(),
                // reaEntity.getGxPlanNo(), matNo };
                // paramsList.add(objArr);
                // matNoList1.add(matNo);
                // }
                // }
                // PlnHelper.batchDeleteOrUpdate(con,
                // "GeneratePlanStoveE.updateMatZcM", "",
                // paramsList);
                //
                // // 修改镦拔扩排产实际挂料支吨
                // PlnHelper
                // .deleteOrUpdate(
                // con,
                // "GeneratePlanStoveE.updatePlnOrderDbkSRealBatch",
                // "",
                // new String[] { String.valueOf(num),
                // String.valueOf(wgt),
                // reaEntity.getProPlanId(),
                // reaEntity.getGxPlanNo() });
                // } else
                // // 4.6 如果不是最后一个炉计划
                // {
                // // 4.6.1 修改虚拟炉计划
                // int canNum = allowNum - realNum;
                // double canWgt = allowWgt - readlWgt;
                // PlnHelper.deleteOrUpdate(
                // con,
                // "GeneratePlanStoveE.updatePlnZyDbkReady",
                // "",
                // new Object[] { canNum, canWgt,
                // reaEntity.getProPlanId(),
                // reaEntity.getGxPlanNo(),
                // reaEntity.getReadyPlanNo() });
                // // 4.6.2 新增实际炉计划
                // zyEntity.setInNum(String.valueOf(canNum));// 计划投入支数
                // zyEntity.setInWt(String.valueOf(canWgt));// 计划投入重量
                // // zyEntity.setOutNum(String.valueOf(canNum));// 计划产出支数
                // // 计划产出重量
                // // double outWgt = 0.02466 * height * (diameter -
                // // height)
                // // * length * canNum / 1000;
                // // zyEntity.setOutWt(String.valueOf(outWgt));
                // PlnHelper.addEntityData(con,
                // "GeneratePlanStoveE.addPlnZyDbkReadyEntity",
                // zyEntity);
                // wgt = wgt - canWgt;
                // num = num - canNum;
                // // 4.4.3修改库存数据
                // List<Object[]> paramsList = new ArrayList<Object[]>();
                // for (String matNo : matNoList) {
                // if (paramsList.size() > canNum) {
                // break;
                // }
                // if (!matNoList1.contains(matNo)) {
                // Object[] objArr = new Object[] { "80150103",
                // heatPlanNo, reaEntity.getProPlanId(),
                // reaEntity.getGxPlanNo(), matNo };
                // paramsList.add(objArr);
                // matNoList1.add(matNo);
                // }
                // }
                // // 修改库存数据
                // PlnHelper.batchDeleteOrUpdate(con,
                // "GeneratePlanStoveE.updateMatZcM", "",
                // paramsList);
                // // 修改镦拔扩排产实际挂料支吨
                // PlnHelper
                // .deleteOrUpdate(
                // con,
                // "GeneratePlanStoveE.updatePlnOrderDbkSRealBatch",
                // "",
                // new String[] { String.valueOf(canNum),
                // String.valueOf(canWgt),
                // reaEntity.getProPlanId(),
                // reaEntity.getGxPlanNo() });
                // }
                //
                // }
                // 修改钢管判定表
                PlnHelper.deleteOrUpdate(con,
                        "GeneratePlanStoveE.updateQcmZgJugdeApply", "",
                        new String[] { appEntity.getJugdeApplyCode(),
                                appEntity.getJudgeStoveNo(),
                                appEntity.getBatchNo(),
                                appEntity.getBatchGroudNo(),
                                appEntity.getQualityGroup() });
                con.commit();
            }
        }
        catch (Exception e) {
            try {
                con.rollback();
            }
            catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
        finally {
            try {
                if (con != null && !con.isClosed()) {
                    con.close();
                }
            }
            catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static PlnOrderDbkSEntity fiterDbks(List<PlnOrderDbkSEntity> list,
            String proPlanId, String gxPlanNo) {
        for (PlnOrderDbkSEntity entity : list) {
            if (entity.getProPlanId().equals(proPlanId)
                    && entity.getGxPlanNo().equals(gxPlanNo)) {
                return entity;
            }
        }
        return null;
    }
}

/**
 * 生成热处理实际炉计划
 * @author peng
 */
class GeneratePlanStoveF extends DBCommon {

    public void generatePlanStove() {
        Connection con = null;
        String upSql = "AND T.VALIDFLAG='20' AND (T.IF_SET_ZY_PLAN='0' OR T.IF_SET_ZY_PLAN IS NULL) ORDER BY JUDGE_RESULT_TIME";//
        // AND
        // String upSql = " AND T.JUDGE_STOVE_NO='065037' ";
        try {
            /**
             * 1查询钢管申请判定表 已判定且未处理后工序的记录
             */
            con = this.getDao(CoreConstantData.sysbeanstr).getConnection();
            con.setAutoCommit(false);
            List<QcmZgJugdeApplyEntity> appEntityList = PlnHelper
                    .getEntityDatas(con, new String[] {},
                            "GeneratePlanStoveF.getQcmZgJugdeApply", upSql,
                            QcmZgJugdeApplyEntity.class);

            if (appEntityList == null || appEntityList.size() == 0) {
                return;
            }

            /**
             * 2.验证钢管申请判定表
             */
            for (QcmZgJugdeApplyEntity appEntity : appEntityList) {
                int num = 0;// 支数
                if (!appEntity.getActCount().equals("")) {
                    num = Integer.parseInt(appEntity.getActCount());
                }
                double wgt = 0;// 重量 (如果实重为空则取理论重量)
                if (!appEntity.getActWeight().equals("")) {
                    wgt = Double.parseDouble(appEntity.getActWeight());
                }
                else {
                    if (!appEntity.getActTheoryWeight().equals("")) {
                        wgt = Double
                                .parseDouble(appEntity.getActTheoryWeight());
                    }
                }
                // 如果支数和重量都等于0
                if (num <= 0 || wgt <= 0) {
                    continue;
                }
                // 2.1 查询库存数据的序号
                List<String> matNoList = PlnHelper.getParams(con,
                        "GeneratePlanStoveF.queryMatZcMNo", new String[] {
                                appEntity.getJugdeApplyCode(),
                                appEntity.getJudgeStoveNo(),
                                appEntity.getBatchNo(),
                                appEntity.getBatchGroudNo(),
                                appEntity.getQualityGroup(),
                                appEntity.getMatGowhereCode() }, "MAT_NO");
                // 库存数据与判定数据记录不一致
                if (matNoList.size() != num) {
                    return;
                }

                // 2.2 通过轧管订单编号 查询热处理排产
                String proPlanIdD = appEntity.getProOrderId();// 轧管订单编号
                String judgeStoveNo = appEntity.getJudgeStoveNo();// 炉号
                List<PlnOrderRclSEntity> rclsEntityList = PlnHelper
                        .getEntityDatas(con, new String[] { proPlanIdD },
                                "GeneratePlanStoveF.getPlnOrderRclSEntity",
                                PlnOrderRclSEntity.class);
                if (rclsEntityList == null || rclsEntityList.size() == 0) {
                    continue;
                }
                // 用于保存已经使用的材料号
                List<String> matNoList1 = new ArrayList<String>();

                /**
                 * 3. 所有虚拟炉计划集合
                 */
                // List<PlnZyRclReadyEntity> allRealList = new
                // ArrayList<PlnZyRclReadyEntity>();
                // for (PlnOrderRclSEntity rclsEntity : rclsEntityList) {
                // String proPlanIdE = rclsEntity.getProPlanId();// 热处理订单编号
                // String gxPlanNo = rclsEntity.getGxPlanNo();// 排产序号
                // // 3.通过热处理订单编号、排产序号以及炉号查询虚拟炉计划
                // String supSql =
                // " AND T.PRO_PLAN_ID=? AND T.GX_PLAN_NO=? AND T.JUDGE_STOVE_NO=?";
                // List<PlnZyRclReadyEntity> reaEntityList = PlnHelper
                // .getEntityDatas(
                // con,
                // new String[] { proPlanIdE, gxPlanNo,
                // judgeStoveNo },
                // "GeneratePlanStoveF.getPlnZyRclReadyEntity",
                // supSql, PlnZyRclReadyEntity.class);
                // if (reaEntityList == null || reaEntityList.size() == 0) {
                // continue;
                // }
                // for (PlnZyRclReadyEntity reaEntity : reaEntityList) {
                // allRealList.add(reaEntity);
                // }
                // }

                // 如果没有虚拟炉计划
                // if (allRealList.size() == 0) {
                // continue;
                // }

                // 查询仓库编码与仓库号
                String[] storgeArr = PlnHelper.getArray(con,
                        "GeneratePlanStoveF.getStorageNo", new String[] {
                                appEntity.getJugdeApplyCode(),
                                appEntity.getJudgeStoveNo(),
                                appEntity.getBatchNo(),
                                appEntity.getBatchGroudNo(),
                                appEntity.getQualityGroup(),
                                appEntity.getMatGowhereCode() }, new String[] {
                                "STORAGE_NO", "STORAGE_NAME" });
                /**
                 * 4.生成实际炉计划
                 */
                // 4.1生成最大炉次ID
                SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
                String nowTime = df.format(new Date());// 当前时间
                int maxNum = Integer.parseInt(PlnHelper.getParam(con,
                        "GeneratePlanStoveF.getMaxHeatPlanNoF", "",
                        new String[] { nowTime }, "HEAT_PLAN_NO"));// 炉号最大序号

                // 4.2生成热处理实际炉计划
                // for (int i = 0; i < allRealList.size(); i++) {
                // PlnZyRclReadyEntity reaEntity = allRealList.get(i);
                // int allowNum = Integer.parseInt(reaEntity.getAllotNum());//
                // 分配支数
                // double allowWgt = Double
                // .parseDouble(reaEntity.getAllotWt());// 分配重量
                //
                // int realNum = 0;// 实际分配支数
                // if (!reaEntity.getRealAllotNum().equals("")) {
                // realNum = Integer.parseInt(reaEntity.getRealAllotNum());
                // }
                // double readlWgt = 0;// 实际分配重量
                // if (!reaEntity.getRealAllotWt().equals("")) {
                // readlWgt = Double.parseDouble(reaEntity
                // .getRealAllotWt());
                // }
                // if (allowWgt - readlWgt <= 0) {
                // continue;
                // }
                //
                // // 4.3 用于此虚拟炉计划的排产
                // PlnOrderRclSEntity fitEntiy = GeneratePlanStoveF.fiterRcls(
                // rclsEntityList, reaEntity.getProPlanId(),
                // reaEntity.getGxPlanNo());// 肯定不为NULL
                //
                // String heatPlanNo = "F" + nowTime
                // + String.format("%04d", maxNum);// 炉次ID
                // maxNum++;
                // // 4.4生成实际炉计划实体类
                // PlnZyRclMEntity zyEntity = new PlnZyRclMEntity();
                // BeanUtils.copyProperties(zyEntity, fitEntiy);// 复制 数据
                // zyEntity.setHeatPlanNo(heatPlanNo);// 炉计划ID
                // zyEntity.setHeatnoLast(judgeStoveNo);// 炉号
                // zyEntity.setLastBatchNo(appEntity.getBatchNo());// 批号
                // zyEntity.setBatchGroudNo(appEntity.getBatchGroudNo());// 组号
                // zyEntity.setIfWlMatched("0");// 是否挂料确定
                // zyEntity.setCreateName("SYSTEM");// 创建人
                // zyEntity.setPlanstatus("1");// 计划状态
                // zyEntity.setReadyPlanNo(reaEntity.getReadyPlanNo());// 预排序号
                // zyEntity.setJugdeApplyCode(appEntity.getJugdeApplyCode());//
                // 申请判定单号
                // zyEntity.setQualityGroup(appEntity.getQualityGroup());//
                // 质量分组号
                // zyEntity.setMatGowhereCode(appEntity.getMatGowhereCode());//
                // 材料去向
                // if (storgeArr != null && storgeArr.length > 0) {
                // zyEntity.setStorageNo1(storgeArr[0]);// 仓库编码
                // zyEntity.setStorageName1(storgeArr[1]);// 仓库名称
                // }
                // String proIndex = PlnHelper.getParam(con,
                // "GeneratePlanStoveF.getProdIndexF",
                // new String[] { zyEntity.getZyBatchId() },
                // "PROD_INDEX");//
                // zyEntity.setProdIndex(proIndex);// 批次生产序号
                // // 4.5 如果 最后一个虚拟炉计划,则全部分配给这个虚拟炉计划
                // if ((i + 1) == allRealList.size()
                // || wgt < allowWgt - readlWgt) {
                //
                // // 4.5.1 修改虚拟炉计划
                // PlnHelper.deleteOrUpdate(
                // con,
                // "GeneratePlanStoveF.updatePlnZyRclReady",
                // "",
                // new Object[] { num, wgt,
                // reaEntity.getProPlanId(),
                // reaEntity.getGxPlanNo(),
                // reaEntity.getReadyPlanNo() });
                //
                // // 4.5.2 新增实际炉计划
                // zyEntity.setInNum(String.valueOf(num));// 计划投入支数
                // zyEntity.setInWt(String.valueOf(wgt));// 计划投入重量
                // PlnHelper.addEntityData(con,
                // "GeneratePlanStoveF.addPlnZyRclReadyEntity",
                // zyEntity);
                // // 4.5.3修改库存数据
                // List<Object[]> paramsList = new ArrayList<Object[]>();
                // for (String matNo : matNoList) {
                // if (paramsList.size() > num) {
                // break;
                // }
                // if (!matNoList1.contains(matNo)) {
                // Object[] objArr = new Object[] { "80150103",
                // heatPlanNo, reaEntity.getProPlanId(),
                // reaEntity.getGxPlanNo(), matNo };
                // paramsList.add(objArr);
                // matNoList1.add(matNo);
                // }
                // }
                // PlnHelper.batchDeleteOrUpdate(con,
                // "GeneratePlanStoveF.updateMatZcM", "",
                // paramsList);
                //
                // // 修改热处理排产实际挂料支吨
                // PlnHelper
                // .deleteOrUpdate(
                // con,
                // "GeneratePlanStoveF.updatePlnOrderRclSRealBatch",
                // new String[] { String.valueOf(num),
                // String.valueOf(wgt),
                // reaEntity.getProPlanId(),
                // reaEntity.getGxPlanNo() });
                // } else
                // // 4.6 如果不是最后一个炉计划
                // {
                // // 4.6.1 修改虚拟炉计划
                // int canNum = allowNum - realNum;
                // double canWgt = allowWgt - readlWgt;
                // PlnHelper.deleteOrUpdate(
                // con,
                // "GeneratePlanStoveF.updatePlnZyRclReady",
                // "",
                // new Object[] { canNum, canWgt,
                // reaEntity.getProPlanId(),
                // reaEntity.getGxPlanNo(),
                // reaEntity.getReadyPlanNo() });
                // // 4.6.2 新增实际炉计划
                // zyEntity.setInNum(String.valueOf(canNum));// 计划投入支数
                // zyEntity.setInWt(String.valueOf(canWgt));// 计划投入重量
                // // zyEntity.setOutNum(String.valueOf(canNum));// 计划产出支数
                // // 计划产出重量
                // // double outWgt = 0.02466 * height * (diameter -
                // // height)
                // // * length * canNum / 1000;
                // // zyEntity.setOutWt(String.valueOf(outWgt));
                // PlnHelper.addEntityData(con,
                // "GeneratePlanStoveF.addPlnZyRclReadyEntity",
                // zyEntity);
                // wgt = wgt - canWgt;
                // num = num - canNum;
                // // 4.4.3修改库存数据
                // List<Object[]> paramsList = new ArrayList<Object[]>();
                // for (String matNo : matNoList) {
                // if (paramsList.size() > canNum) {
                // break;
                // }
                // if (!matNoList1.contains(matNo)) {
                // Object[] objArr = new Object[] { "80150103",
                // heatPlanNo, reaEntity.getProPlanId(),
                // reaEntity.getGxPlanNo(), matNo };
                // paramsList.add(objArr);
                // matNoList1.add(matNo);
                // }
                // }
                // // 修改库存数据
                // PlnHelper.batchDeleteOrUpdate(con,
                // "GeneratePlanStoveF.updateMatZcM", "",
                // paramsList);
                // // 修改热处理排产实际挂料支吨
                // PlnHelper
                // .deleteOrUpdate(
                // con,
                // "GeneratePlanStoveF.updatePlnOrderRclSRealBatch",
                // new String[] { String.valueOf(canNum),
                // String.valueOf(canWgt),
                // reaEntity.getProPlanId(),
                // reaEntity.getGxPlanNo() });
                // }
                //
                // }
                // 修改钢管判定表
                PlnHelper.deleteOrUpdate(con,
                        "GeneratePlanStoveF.updateQcmZgJugdeApply", "",
                        new String[] { appEntity.getJugdeApplyCode(),
                                appEntity.getJudgeStoveNo(),
                                appEntity.getBatchNo(),
                                appEntity.getBatchGroudNo(),
                                appEntity.getQualityGroup() });
                con.commit();
            }
        }
        catch (Exception e) {
            try {
                con.rollback();
            }
            catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
        finally {
            try {
                if (con != null && !con.isClosed()) {
                    con.close();
                }
            }
            catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static PlnOrderRclSEntity fiterRcls(List<PlnOrderRclSEntity> list,
            String proPlanId, String gxPlanNo) {
        for (PlnOrderRclSEntity entity : list) {
            if (entity.getProPlanId().equals(proPlanId)
                    && entity.getGxPlanNo().equals(gxPlanNo)) {
                return entity;
            }
        }
        return null;
    }
}
