package com.steering.pss.qcm;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;

import CoreFS.SA06.CoreReturnObject;
import CoreFS.SA08.CoreXmlSqlParsersFactory;

import com.steering.comm.db.DBCommon;
import com.steering.comm.tools.StringTool;

/**
 * 产品规范管理类
 * @author Administrator PDY 2014-12-17
 */
public class CoreStandard1 extends DBCommon {

    /**
     * 标准基础 查询
     * @param valid 有效标识
     * @param std 标准类型
     * @return 标准基础
     */
    public CoreReturnObject getComBaseStd(String valid, String std) {
        Object[] params = new Object[] { valid, std };
        return this.getDataBySqlID("CoreStandard1.QUERY", params);
    }
    
    /**
     * 标准基础 查询
     * @param valid 有效标识
     * @param std 标准类型
     * @return 标准基础
     */
    public CoreReturnObject getComAlphaStd(String valid, String std) {
        Object[] params = new Object[] { valid, std };
        return this.getDataBySqlID("CoreStandard1.QUERYALPHA", params);
    }

    /**
     * 标准类型 初始化
     * @return 数据集
     */
    public CoreReturnObject getStd_Style() {
        return this.getDataBySqlID("CoreStandard1.GetStdStyle");
    }

    /**
     * 绑定最终客户 初始化
     * @return 数据集
     */
    public CoreReturnObject getCust() {
        return this.getDataBySqlID("CoreStandard1.GETCUST");
    }

    /**
     * 标准协会 初始化
     * @return 数据集
     */
    public CoreReturnObject bandCmbMaxStdXh() {
        return this.getDataBySqlID("CoreStandard1.BANDSTDXH");
    }

    /**
     * 钢级牌号 初始化
     * @return 数据集
     */
    public CoreReturnObject getSteel() {
        return this.getDataBySqlID("CoreStandard1.GETSTEEL");
    }

    /**
     * 品名描述 初始化
     * @return 数据集
     */
    public CoreReturnObject getProducName() {
        return this.getDataBySqlID("CoreStandard1.GETPRODUCT");
    }

    /**
     * 产品规范 查询
     * @param std 标准名称
     * @return 数据集
     */
    public CoreReturnObject getComPsc(String std) {
        Object[] params = new Object[] { std };
        return this.getDataBySqlID("CoreStandard1.COMPSC", params);
    }

    /**
     * 最终客户 查询
     * @param std 标准名称
     * @return 数据集
     */
    public CoreReturnObject getComBaseStdRCust(String std) {
        Object[] params = new Object[] { std };
        return this.getDataBySqlID("CoreStandard1.COMSTDRCUST", params);
    }

    /**
     * 保存
     * @param stdAdd 标准基础 增加
     * @param stdUpdate 标准基础 修改
     * @param pscAdd 产品规范 增加
     * @param pscUpdate 产品规范 修改
     * @param custAdd 最终客户 增加
     * @param custUpdate 最终客户 修改
     * @return 执行条数
     */
    public CoreReturnObject saveCoreStandard1(
            ArrayList<ArrayList<Object>> stdAdd,
            ArrayList<ArrayList<Object>> stdUpdate,
            ArrayList<ArrayList<Object>> pscAdd,
            ArrayList<ArrayList<Object>> pscUpdate,
            ArrayList<ArrayList<Object>> custAdd,
            ArrayList<ArrayList<Object>> custUpdate) {
        // 执行sql
        ArrayList<String> sqlIdList = new ArrayList<String>();
        // 执行参数
        ArrayList<Object[]> params = new ArrayList<Object[]>();
        // 标准基础 界面标准代码和产生标准代码组成键值对
        HashMap<String, String> stdCodeHash = new HashMap<String, String>();

        try {
            String sql = CoreXmlSqlParsersFactory
                    .getSql("CoreStandard1.MAXSTDCODE");
            ResultSet rs = this.getDao("TgDao").ExceuteQueryForResultSet(sql);
            int stdCodePart = 0;
            if (rs.next()) {
                stdCodePart = Integer
                        .parseInt(rs.getString(1).substring(3, 10));
            }
            rs.close();
            // 标准基础 增加
            for (int i = 0; i < stdAdd.size(); i++) {
                DecimalFormat df = new DecimalFormat("0000000");
                String stdCode = "STD" + df.format(stdCodePart + 1);
                stdAdd.get(i).set(0, stdCode);
                sqlIdList.add("CoreStandard1.ADD");
                params.add(stdAdd.get(i).toArray());
                stdCodeHash.put(stdAdd.get(i).get(0).toString(), stdCode);
                stdCodePart += 1;
            }
            // 标准基础 修改
            for (int i = 0; i < stdUpdate.size(); i++) {
                sqlIdList.add("CoreStandard1.UPDATE");
                params.add(stdUpdate.get(i).toArray());
            }
            // 产品规范 增加
            for (int i = 0; i < pscAdd.size(); i++) {
                String stdCode = pscAdd.get(i).get(3).toString();
                if (stdCodeHash.containsKey(stdCode)) {
                    pscAdd.get(i).set(3, stdCodeHash.get(stdCode));
                }
                sqlIdList.add("CoreStandard1.ADD1");
                params.add(pscAdd.get(i).toArray());
            }
            // 产品规范 修改
            for (int i = 0; i < pscUpdate.size(); i++) {
                sqlIdList.add("CoreStandard1.UPDATE1");
                params.add(pscUpdate.get(i).toArray());
            }
            // 客户增加
            for (int i = 0; i < custAdd.size(); i++) {
                String stdCode = custAdd.get(i).get(3).toString();
                if (stdCodeHash.containsKey(stdCode)) {
                    pscAdd.get(i).set(3, stdCodeHash.get(stdCode));
                }
                sqlIdList.add("CoreStandard1.ADD2");
                params.add(custAdd.get(i).toArray());
            }
            for (int i = 0; i < custUpdate.size(); i++) {
                sqlIdList.add("CoreStandard1.UPDATE2");
                params.add(custUpdate.get(i).toArray());
            }
            // 客户修改
        }
        catch (SQLException e) {
        }

        return this.setDataById(sqlIdList, params);
    }

    /**
     * 作废或者恢复
     * @param stdList 标准基础
     * @param pscList 产品规范
     * @param custList 最终客户
     * @param flag TRUE 作废 FALSE 恢复
     * @return 執行條數
     */
    public CoreReturnObject deleteOrResume(
            ArrayList<ArrayList<Object>> stdList,
            ArrayList<ArrayList<Object>> pscList,
            ArrayList<ArrayList<Object>> custList, Boolean flag) {
        // 执行SQL
        ArrayList<String> sqlIdList = new ArrayList<String>();
        // 执行参数
        ArrayList<Object[]> params = new ArrayList<Object[]>();
        // 标准基础
        for (int i = 0; i < stdList.size(); i++) {
            if (flag) {
                sqlIdList.add("CoreStandard1.DELETE");
            }
            else {
                sqlIdList.add("CoreStandard1.RESUME");
            }
            params.add(stdList.get(i).toArray());
        }
        // 產品規范
        for (int i = 0; i < pscList.size(); i++) {
            if (flag) {
                sqlIdList.add("CoreStandard1.DELETE1");
            }
            else {
                sqlIdList.add("CoreStandard1.RESUME1");
            }
            params.add(pscList.get(i).toArray());
        }
        // 客户
        for (int i = 0; i < custList.size(); i++) {
            if (flag) {
                sqlIdList.add("CoreStandard1.DELETE2");
            }
            else {
                sqlIdList.add("CoreStandard1.RESUME2");
            }

            params.add(custList.get(i).toArray());
        }
        return this.setDataById(sqlIdList, params);
    }

    /**
     * 验证是否存在相同的标准名称
     * @param stdName 标准名称
     * @return 数据集
     */
    public CoreReturnObject checkStdName(String stdName, String stdType) {
    	String sql = CoreXmlSqlParsersFactory.getSql("CoreStandard1.CHECKSTDNAME");
        sql = StringTool.ReplaceAll(sql, "#STD_NAME#", stdName);
        sql = StringTool.ReplaceAll(sql, "#STDSTYLE#", stdType);
        return this.getData(sql);
    }

    /**
     * 验证是否存在相同的标准名称
     * @param stdName 标准名称
     * @param stdCode 标准代码
     * @return 数据集
     */
    public CoreReturnObject checkStdName(String stdName, String stdCode, String stdType) {
    	String sql = CoreXmlSqlParsersFactory.getSql("CoreStandard1.CHECKSTDNAME");
        sql = StringTool.ReplaceAll(sql, "#STD_NAME#", stdName);
        sql = StringTool.ReplaceAll(sql, "#STD_CODE#", stdCode);
        sql = StringTool.ReplaceAll(sql, "#STDSTYLE#", stdType);
        return this.getData(sql);
    }

    /**
     * 验证是否存在相同的产品规范描述
     * @param pscDesc 产品规范描述
     * @return 数据集
     */
    public CoreReturnObject checkPSC(String pscDesc) {
        Object[] params = new Object[] { pscDesc };
        return this.getDataBySqlID("CoreStandard1.CHECKPSC", params);
    }

    /**
     * 验证是否存在相同的产品规范描述
     * @param pscDesc 产品规范描述
     * @param psc 产品规范码
     * @return 数据集
     */
    public CoreReturnObject checkPSC(String pscDesc, String psc) {
        Object[] params = new Object[] { psc, pscDesc };
        return this.getDataBySqlID("CoreStandard1.CHECKPSC1", params);
    }

    /**
     * 验证是否存在相同的最终客户
     * @param custCode 最终客户代码
     * @param stdCode 标准代码
     * @return 数据集
     */
    public CoreReturnObject checkCust(String custCode, String stdCode) {
        Object[] params = new Object[] { custCode, stdCode };
        return this.getDataBySqlID("CoreStandard1.CHECKCUST", params);
    }

    /**
     * 验证是否存在相同的最终客户
     * @param custCode 最终客户代码
     * @param stdCode 标准代码
     * @return 数据集
     */
    public CoreReturnObject checkCust1(String custCode, String stdCode) {
        Object[] params = new Object[] { stdCode, custCode };
        return this.getDataBySqlID("CoreStandard1.CHECKCUST1", params);
    }
}
