package com.steering.pss.sale.order;

import CoreFS.SA08.CoreXmlSqlParsersFactory;
import com.steering.comm.tools.EntityTool;
import com.steering.pss.sale.order.model.SlmOrderReviewItemListEntity;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * 合同状态变更公共方法
 * @author WHB 2015-6-18
 */
public class CoreOrderStatusCommFun {

    /**
     * ORD_PK生成ReviewNo
     * @param con
     * @param parm
     * @return
     * @throws SQLException
     */
    public static String generateOrderReviewNo(Connection con,
            ArrayList<Object> parm) throws SQLException {
        String reviewNo = "";
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.CreateReviewNo");
        PreparedStatement ps = con.prepareStatement(sql);
        for (int i = 0; i < parm.size(); i++) {
            ps.setObject(i + 1, parm.get(i));
        }
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
            reviewNo = rs.getString(1);
        }
        rs.close();
        ps.close();
        return reviewNo;
    }

    /**
     * 新增一条待审的合同评审记录。
     * @param con
     * @param parm
     * @throws SQLException
     */
    public static void insertOrderReview(Connection con, ArrayList<Object> parm)
            throws SQLException {

        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.InsertOrderReview");
        PreparedStatement ps = con.prepareStatement(sql);
        for (int i = 0; i < parm.size(); i++) {
            ps.setObject(i + 1, parm.get(i));
        }
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 新增项目记录
     * @param con
     * @param parm
     * @throws SQLException
     */
    public static void insertOrderReviewItem(Connection con,
            ArrayList<Object> parm) throws SQLException {

        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.InsertOrdereViewItem");
        PreparedStatement ps = con.prepareStatement(sql);
        for (int i = 0; i < parm.size(); i++) {
            ps.setObject(i + 1, parm.get(i));
        }
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 获取OrdPk下的所有有效的OrdLnPk值
     * @param con
     * @param ordPk
     * @return
     * @throws SQLException
     */
    public static List<String> getOrderLnPkValue(Connection con, String ordPk)
            throws SQLException {
        List<String> list = new ArrayList<String>();
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.GetOrdLnPkValue");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, ordPk);
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            list.add(rs.getString(1));
        }
        rs.close();
        ps.close();
        return list;
    }

    /**
     * 质量设计后需要更改技术评审信息
     * @param con
     * @param parm
     * @throws SQLException
     */
    public static void updateOrderReviewItemList(Connection con,
            ArrayList<Object> parm) throws SQLException {

        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateReviewInfo");
        PreparedStatement ps = con.prepareStatement(sql);
        for (int i = 0; i < parm.size(); i++) {
            ps.setObject(i + 1, parm.get(i));
        }
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 更行合同评审单状态+评审开始时间
     * @param con
     * @param reviewNo 评审单号
     * @param item 项目 T 技术 D交货 P 价格 F 法务
     * @param status 什么状态 L:封锁;W:待审;D:评审中;S:评审通过;F评审失败
     * @throws SQLException
     */
    public static void updateOrderReviewItem(Connection con, String reviewNo,
            String item, String status) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderReviewItem");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, status);
        ps.setObject(2, reviewNo);
        ps.setObject(3, item);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 更行合同评审单状态+评审结束时间
     * @param con
     * @param reviewNo
     * @param item
     * @param status
     * @throws SQLException
     */
    public static void updateOrderReviewItemEDate(Connection con,
            String reviewNo, String item, String status) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderReviewItemEDate");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, status);
        ps.setObject(2, reviewNo);
        ps.setObject(3, item);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 更行合同评审单状态+不更改时间
     * @param con
     * @param reviewNo
     * @param item
     * @param status
     * @throws SQLException
     */
    public static void updateOrderReviewItemNoDate(Connection con,
            String reviewNo, String item, String status) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderReviewItemNoDate");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, status);
        ps.setObject(2, reviewNo);
        ps.setObject(3, item);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 更行合同评审单状态+消除结束时间
     * @param con
     * @param reviewNo
     * @param item
     * @param status
     * @throws SQLException
     */
    public static void updateOrderReviewItemClearEDate(Connection con,
            String reviewNo, String item, String status) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderReviewItemClearEDate");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, status);
        ps.setObject(2, reviewNo);
        ps.setObject(3, item);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 更改某一项目，状态，标示，人员，单位。
     * @param con
     * @param reviewNo 评审号
     * @param item 项目
     * @param listTyp H L D
     * @param listVal 键值
     * @param name 操作人
     * @param dept 部门科室
     * @param iscur 是否当前标示
     * @param iscurN 要改的标示
     * @param status 状态
     * @param obj 那个界面操作的
     * @throws SQLException
     */
    public static void updateOrderReviewItemList(Connection con,
            String reviewNo, String item, String listTyp, String listVal,
            String name, String dept, String iscur, String iscurN,
            String status, String reviewMemo, String obj) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderReviewItemList");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, iscur);
        ps.setObject(2, status);
        ps.setObject(3, name);
        ps.setObject(4, reviewMemo);
        ps.setObject(5, dept);
        ps.setObject(6, obj);
        ps.setObject(7, reviewNo);
        ps.setObject(8, item);
        ps.setObject(9, listTyp);
        ps.setObject(10, listVal);
        ps.setObject(11, iscurN);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 更改评审结束时间
     * @param con
     * @param reviewNo
     * @param item
     * @param listTyp
     * @param listVal
     * @param name
     * @param dept
     * @param iscur
     * @param iscurN
     * @param status
     * @param reviewMemo
     * @throws SQLException
     */
    public static void updateOrderReviewItemListEDate(Connection con,
            String reviewNo, String item, String listTyp, String listVal,
            String name, String dept, String iscur, String iscurN,
            String status, String reviewMemo) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderReviewItemListEDate");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, iscur);
        ps.setObject(2, status);
        ps.setObject(3, name);
        ps.setObject(4, reviewMemo);
        ps.setObject(5, dept);

        ps.setObject(6, reviewNo);
        ps.setObject(7, item);
        ps.setObject(8, listTyp);
        ps.setObject(9, listVal);
        ps.setObject(10, iscurN);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 评审明细表中价格评审（标识为“1”）的状态为“评审失败”并写入了结束时间
     * @param con
     * @param reviewNo
     * @param item 项目 价格 法务 技术 交货
     * @param listTyp H L D
     * @param listVal 键值
     * @param status 状态 Ｌ Ｗ Ｄ Ｆ S
     * @param iscur 0 1 是否当前评审标示
     * @param name 操作人
     * @param dept 部门-科室
     * @throws SQLException
     */
    public static void updateOrderReviewItemList(Connection con,
            String reviewNo, String item, String listTyp, String listVal,
            String status, String iscur, String name, String dept,
            String reviewMemo, String obj) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderReviewItemListStatus");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, status);
        ps.setObject(2, name);
        ps.setObject(3, dept);
        ps.setObject(4, reviewMemo);
        ps.setObject(5, obj);
        ps.setObject(6, reviewNo);
        ps.setObject(7, item);
        ps.setObject(8, listTyp);

        ps.setObject(9, listVal);
        ps.setObject(10, iscur);

        ps.executeUpdate();
        ps.close();
    }

    /**
     * 更新合同头状态+审批人+审批时间
     * @param con
     * @param ordPk
     * @param bestatus 前一状态
     * @param status
     * @param statusDesc
     * @param name 审批人
     * @param date 审批时间
     * @throws SQLException
     */
    public static void updateOrderHeadStatus(Connection con, String ordPk,
            String bestatus, String status, String statusDesc, String name,
            String date) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderHeadStatus");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, status);
        ps.setObject(2, statusDesc);
        ps.setObject(3, bestatus);
        ps.setObject(4, name);
        ps.setObject(5, date);
        ps.setObject(6, ordPk);

        ps.executeUpdate();
        ps.close();
        new CoreOrderInfoUpdate().doCrmEvent(con, ordPk,"","","1","0");
    }

    /**
     * 更新合同头状态+审批人+审批时间+不改前一状态
     * @param con
     * @param ordPk
     * @param status
     * @param statusDesc
     * @param name
     * @param date
     * @throws SQLException
     */
    public static void updateOrderHeadStatusConfirm(Connection con,
            String ordPk, String status, String statusDesc, String name,
            String date) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderHeadStatusConfirm");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, status);
        ps.setObject(2, statusDesc);

        ps.setObject(3, name);
        ps.setObject(4, date);
        ps.setObject(5, ordPk);

        ps.executeUpdate();
        ps.close();
    }

    /**
     * 合同生效专用
     * @param con
     * @param ordPk
     * @param bestatus
     * @param status
     * @param statusDesc
     * @param name
     * @throws SQLException
     */
    public static void updateOrderHeadStatusEffect(Connection con,
            String ordPk, String bestatus, String status, String statusDesc,
            String name, String custNo) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderHeadStatusEffect");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, status);
        ps.setObject(2, statusDesc);
        ps.setObject(3, bestatus);
        ps.setObject(4, name);
        ps.setObject(5, custNo);
        ps.setObject(6, ordPk);

        ps.executeUpdate();
        ps.close();

        new CoreOrderInfoUpdate().doCrmEvent(con, ordPk,"","","1");
    }

    /**
     * 撤销生效专用
     * @param con
     * @param ordPk
     * @param bestatus
     * @param status
     * @param statusDesc
     * @throws SQLException
     */
    public static void updateOrderHeadStatus(Connection con, String ordPk,
            String bestatus, String status, String statusDesc)
            throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderHeadStatusNoEffect");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, status);
        ps.setObject(2, statusDesc);
        ps.setObject(3, bestatus);

        ps.setObject(4, ordPk);

        ps.executeUpdate();
        ps.close();

        new CoreOrderInfoUpdate().doCrmEvent(con, ordPk,"","","1","0");
    }

    /**
     * 修改指定交货行的状态
     * @param con
     * @param ordLnDlyPk
     * @param bestatus
     * @param status
     * @throws SQLException
     */
    public static void updateOrderDeliveryLineStatusOrdLnDlyPk(Connection con,
            String ordLnDlyPk, String status) throws SQLException {

        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateDeliveryLineStatus");
        PreparedStatement ps = con.prepareStatement(sql);
        // ps.setObject(1, bestatus);
        ps.setObject(1, status);
        ps.setObject(2, ordLnDlyPk);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 修改指定合同行的状态
     * @param con
     * @param ordLnPk
     * @param bestatus
     * @param status
     * @throws SQLException
     */
    public static void updateOrderLineStatus(Connection con, String ordLnPk,
            String status) throws SQLException {

        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderLineStatus");
        PreparedStatement ps = con.prepareStatement(sql);
        // ps.setObject(1, bestatus);
        ps.setObject(1, status);
        ps.setObject(2, ordLnPk);
        ps.executeUpdate();
        ps.close();

        new CoreOrderInfoUpdate().doCrmEvent(con,"",ordLnPk,"","1");
    }

    /**
     * 修改指定合同头的状态
     * @param con
     * @param ordPk
     * @param bestatus
     * @param status
     * @param statusDesc
     * @throws SQLException
     */
    public static void updateOrderHeadStatusReport(Connection con,
            String ordPk, String status, String statusDesc) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderHeadStatusRep");
        PreparedStatement ps = con.prepareStatement(sql);
        // ps.setObject(1, bestatus);
        ps.setObject(1, status);
        ps.setObject(2, statusDesc);
        ps.setObject(3, ordPk);
        ps.executeUpdate();
        ps.close();
        new CoreOrderInfoUpdate().doCrmEvent(con,ordPk,"","","1");
    }

    /**
     * 修改交货行状态，撤销提报专用
     * @param con
     * @param ordLnDlyPk
     * @param bestatus
     * @throws SQLException
     */
    public static void updateDeliveryLineStatus(Connection con,
            String ordLnDlyPk, String bestatus) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateDeliveryLineOneStatus");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, bestatus);
        ps.setObject(2, ordLnDlyPk);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 用交货行前状态修改合同行状态
     * @param con
     * @param ordLnPk
     * @param bestatus
     * @throws SQLException
     */
    public static void updateLineStatusWithOrdLnDlyPk(Connection con,
            String ordLnPk, String bestatus) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateLineStatusWithOrdLnDlyPk");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, bestatus);
        ps.setObject(2, ordLnPk);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 用交货行前状态修改合同头状态
     * @param con
     * @param ordPk
     * @param bestatus
     * @throws SQLException
     */
    public static void updateHeadStatusWithOrdLnDlyPk(Connection con,
            String ordPk, String bestatus) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateHeadStatusWithOrdLnDlyPk");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, bestatus);
        ps.setObject(2, bestatus);
        ps.setObject(3, ordPk);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 获取指定交货行的前一状态
     * @param con
     * @param ordLnDlyPk
     * @return
     * @throws SQLException
     */
    public static String getOrderDeliveryLineStatus(Connection con,
            String ordLnDlyPk) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.GetDeliveryBeStatusWithOrdLnDlyPk");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, ordLnDlyPk);
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
            return rs.getString(1);
        }
        rs.close();
        ps.close();
        return "";
    }

    /**
     * 将评审明细表中指定项目值为历史
     * @param con
     * @param reviewNo
     * @param item 项目
     * @param listTyp L H D
     * @param listVal 键值
     * @param name 操作人
     * @param dept 部门-科室
     * @param obj 操作界面-功能
     * @param iscur 是否当前评审
     * @throws SQLException
     */
    public static void updateOrderReviewItemList(Connection con,
            String reviewNo, String item, String listTyp, String listVal,
            String name, String dept, String obj, String iscur)
            throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderReviewItemListSetValid");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, name);
        ps.setObject(2, dept);
        ps.setObject(3, obj);
        ps.setObject(4, reviewNo);
        ps.setObject(5, item);
        ps.setObject(6, listTyp);
        ps.setObject(7, listVal);
        ps.setObject(8, iscur);

        ps.executeUpdate();
        ps.close();
    }

    /**
     * 将评审明细表中指定项目值为历史(不该变评审流程字符串描述)
     * @param con
     * @param reviewNo
     * @param item
     * @param listTyp
     * @param listVal
     * @param name
     * @param dept
     * @param iscur
     * @throws SQLException
     */
    public static void updateOrderReviewItemList(Connection con,
            String reviewNo, String item, String listTyp, String listVal,
            String name, String dept, String iscur) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderReviewItemListSetValidNoDesc");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, name);
        ps.setObject(2, dept);
        ps.setObject(3, reviewNo);
        ps.setObject(4, item);
        ps.setObject(5, listTyp);
        ps.setObject(6, listVal);
        ps.setObject(7, iscur);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 新增一条评审明细记录
     * @param con
     * @param reviewNo
     * @param item
     * @param listTyp
     * @param listVal
     * @param status
     * @param name
     * @param dept
     * @param obj 那个界面的操作
     * @throws SQLException
     */
    public static void insertOrderReviewItemList(Connection con,
            String reviewNo, String item, String listTyp, String listVal,
            String status, String name, String dept, String obj)
            throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.InsertOrderReviewItemList");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, reviewNo);
        ps.setObject(2, item);
        ps.setObject(3, listTyp);
        ps.setObject(4, listVal);

        ps.setObject(5, reviewNo);
        ps.setObject(6, item);
        ps.setObject(7, listTyp);
        ps.setObject(8, listVal);
        ps.setObject(9, status);

        ps.setObject(10, name);
        ps.setObject(11, dept);
        ps.setObject(12, obj);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 新增一条评审明细记录 +评审说明
     * @param con
     * @param reviewNo
     * @param item
     * @param listTyp
     * @param listVal
     * @param status
     * @param name
     * @param dept
     * @param obj
     * @param reviewMemo 评审说明
     * @throws SQLException
     */
    public static void insertOrderReviewItemList(Connection con,
            String reviewNo, String item, String listTyp, String listVal,
            String status, String name, String dept, String obj,
            String reviewMemo) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.InsertOrderReviewItemListMemo");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, reviewNo);
        ps.setObject(2, item);
        ps.setObject(3, listTyp);
        ps.setObject(4, listVal);

        ps.setObject(5, reviewNo);
        ps.setObject(6, item);
        ps.setObject(7, listTyp);
        ps.setObject(8, listVal);
        ps.setObject(9, status);

        ps.setObject(10, name);
        ps.setObject(11, dept);
        ps.setObject(12, obj);
        ps.setObject(13, reviewMemo);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 将已评审项目置为0,需要将名字+部门+界面+操作写入obj
     * @param con
     * @param reviewNo
     * @param item
     * @param listTyp
     * @param listVal
     * @param obj
     * @throws SQLException
     */
    public static void updateOrderReviewItemList(Connection con,
            String reviewNo, String item, String listTyp, String listVal,
            String obj) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderReviewItemListSet0");
        PreparedStatement ps = con.prepareStatement(sql);

        ps.setObject(1, obj);
        ps.setObject(2, reviewNo);
        ps.setObject(3, item);
        ps.setObject(4, listTyp);
        ps.setObject(5, listVal);

        ps.executeUpdate();
        ps.close();
    }

    /**
     * 将所有评审明细表合同行状态置为0+结束时间
     * @param con
     * @param reviewNo
     * @param listTyp
     * @param listVal
     * @param name
     * @param dept
     * @param obj
     * @throws SQLException
     */
    public static void updateOrderReviewItemList(Connection con,
            String reviewNo, String listTyp, String listVal, String name,
            String dept, String obj) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderReviewAllItemList");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, name);
        ps.setObject(2, dept);
        ps.setObject(3, obj);
        ps.setObject(4, reviewNo);
        ps.setObject(5, listTyp);
        ps.setObject(6, listVal);

        ps.executeUpdate();
        ps.close();
    }

    /**
     * 获取指定项目 状态为1的明细信息。
     * @param con
     * @param reviewNo
     * @param item
     * @param listTyp
     * @param listPkValue
     * @return
     * @throws SQLException
     */
    public static List<SlmOrderReviewItemListEntity> selectOrderReviewItemListInfo(
            Connection con, String reviewNo, String item, String listTyp,
            String listPkValue) throws SQLException {

        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.SELECTOrderItemListWithStatus1");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, reviewNo);
        ps.setObject(2, item);
        ps.setObject(3, listTyp);
        ps.setObject(4, listPkValue);
        ResultSet rs = ps.executeQuery();
        List<SlmOrderReviewItemListEntity> list = EntityTool.getEntitysByRs(rs,
                SlmOrderReviewItemListEntity.class);
        rs.close();
        ps.close();
        return list;

    }

    /**
     * 将指定项目评审明细表状态置为0，不改变其他信息。
     * @param con
     * @param reviewNo
     * @param item
     * @param listTyp
     * @param listPkValue
     * @throws SQLException
     */
    public static void setOrderReviewItemListValue(Connection con,
            String reviewNo, String item, String listTyp, String listPkValue)
            throws SQLException {

        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.SetOrderItemListValue0");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, reviewNo);
        ps.setObject(2, item);
        ps.setObject(3, listTyp);
        ps.setObject(4, listPkValue);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 新增一条评审明细记录（由实体类初始化）
     * @param con
     * @param slm
     * @throws SQLException
     */
    public static void addOrderReviewItemListInfo(Connection con,
            SlmOrderReviewItemListEntity slm) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.AddOrderReviewItemlistBackUp");
        sql = EntityTool.fillSqlByEntity(sql, slm);
        PreparedStatement ps = con.prepareStatement(sql);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 获取合同的合同类型。
     * @param con
     * @param ordPk
     * @return
     * @throws SQLException
     */
    public static String getOrderType(Connection con, String ordPk)
            throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.GetOrderType");
        String orderType = "";
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, ordPk);
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
            orderType = rs.getString(1);
        }
        rs.close();
        ps.close();
        return orderType;
    }

    /**
     * 更新某一合同行的评审明细记录
     * @param con
     * @param reviewNo
     * @param item
     * @param listTyp
     * @param ordLnPk
     * @param status
     * @throws SQLException
     */

    public static void updateOrderItemListOrdLnPk(Connection con,
            String reviewNo, String item, String listTyp, String ordLnPk,
            String status) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.UpdateOrderItemListOrdLnPk");

        PreparedStatement ps = con.prepareStatement(sql);

        ps.setObject(1, status);
        ps.setObject(2, reviewNo);
        ps.setObject(3, item);
        ps.setObject(4, listTyp);
        ps.setObject(5, ordLnPk);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 获取和同行的评审明细状态
     * @param con
     * @param reviewNo
     * @param item
     * @param listTyp
     * @param ordLnPk
     * @return
     * @throws SQLException
     */
    public static String getOrderItemListStatusOrdLnPk(Connection con,
            String reviewNo, String item, String listTyp, String ordLnPk)
            throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.GetOrderItemListOrdLnPk");

        PreparedStatement ps = con.prepareStatement(sql);

        ps.setObject(1, reviewNo);
        ps.setObject(2, item);
        ps.setObject(3, listTyp);
        ps.setObject(4, ordLnPk);
        ResultSet rs = ps.executeQuery();
        String sts = "";
        if (rs.next()) {
            sts = rs.getString(1);
        }
        rs.close();
        ps.close();
        return sts;
    }

    /**
     * 清空合同行监制编码
     * @param con
     * @param ordLnPk
     * @throws SQLException
     */
    public static void clearOrderLinePrdcrNo(Connection con, String ordLnPk)
            throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.ClearOrderLinePrdcrNo");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, ordLnPk);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 取得合同行的监制代码
     * @param con
     * @param ordLnPk
     * @return
     * @throws SQLException
     */
    public static String[] getOrderLinePrdcrNo(Connection con, String ordLnPk)
            throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.SelectOrderLinePrdcrNo");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, ordLnPk);
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
            String str = rs.getString(1);
            if (str != null && !str.equals("")) {
                str = str.replaceAll("，", ",");
                String[] arr = str.split(",");
                rs.close();
                ps.close();
                return arr;
            }
            else {
                rs.close();
                ps.close();
                return null;
            }
        }
        rs.close();
        ps.close();
        return null;
    }

    /**
     * 清除合同的监制的详细信息
     * @param con
     * @param arr
     * @throws SQLException
     */
    public static void deleteOrderLinePrdcrList(Connection con, String[] arr)
            throws SQLException {
        if (arr.length > 0) {
            for (int i = 0; i < arr.length; i++) {
                String prdcrNo = arr[i];
                String sql = CoreXmlSqlParsersFactory
                        .getSql("CoreOrderStatusCommFun.DeleteOrderLinePrdcrNoList");
                PreparedStatement ps = con.prepareStatement(sql);
                ps.setObject(1, prdcrNo);
                ps.executeUpdate();
                ps.close();
                String sql1 = CoreXmlSqlParsersFactory
                        .getSql("CoreOrderStatusCommFun.DeleteOrderLinePrdcrNo");
                ps = con.prepareStatement(sql1);
                ps.setObject(1, prdcrNo);
                ps.executeUpdate();
                ps.close();
            }
        }
    }

    /**
     * 获取合同行的评审明细记录
     * @param con
     * @param ordPk
     * @return
     * @throws SQLException
     */
    public static List<String> getOrderReviewListStatus(Connection con,
            String ordPk) throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.getOrderReviewListStatus");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, ordPk);
        ResultSet rs = ps.executeQuery();
        List<String> list = new ArrayList<String>();
        while (rs.next()) {
            list.add(rs.getString(1));
        }
        rs.close();
        ps.close();
        return list;
    }

    // ------2015-10-23 新增合同逆流程导致 价格评审不正确的逻辑-----------------------
    /**
     * 修改价格评审状态 (适用于合同直接退回 不影响合同行数的时候)
     * @param con
     * @param ordPk
     * @throws SQLException
     */
    public static void setOrderPriceStatus(Connection con, String ordPk)
            throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.updateOrderPriceStatus");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, ordPk);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 清除价格评审 （评审编号 以及所对应的主从表数据）--适用于改变合同行数的情况
     * @param con
     * @param ordPk
     * @throws SQLException
     */

    public static void clearOrderPriceStatus(Connection con, String ordPk)
            throws SQLException {
        // 从表
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.clearOrderPriceList");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, ordPk);
        ps.executeUpdate();
        ps.close();
        // 主表
        String sql1 = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.clearOrderPrice");
        ps = con.prepareStatement(sql1);
        ps.setObject(1, ordPk);
        ps.executeUpdate();
        ps.close();
        // 合同头
        String sql2 = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.clearOrderPriceNo");
        ps = con.prepareStatement(sql2);
        ps.setObject(1, ordPk);
        ps.executeUpdate();
        ps.close();

    }

    /**
     * 生效时 保存交货行主要信息到进程表
     * @param con
     * @param ordPk
     * @throws SQLException
     */
    public static void insertProcessOrder(Connection con, String ordPk)
            throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.insertProcessOrder");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, ordPk);
        ps.executeUpdate();
        ps.close();
    }

    /**
     * 撤销生效时 清除进程信息数据
     * @param con
     * @param ordPk
     * @throws SQLException
     */
    public static void clearProcessOrder(Connection con, String ordPk)
            throws SQLException {
        String sql = CoreXmlSqlParsersFactory
                .getSql("CoreOrderStatusCommFun.clearProcessOrder");
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setObject(1, ordPk);
        ps.executeUpdate();
        ps.close();
    }

}
