package com.steering.pss.sale.order.qualityDesign.server.iserver;

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

import CoreFS.SA08.CoreXmlSqlParsersFactory;

/**
 * 自动评审通过类(自动评审通过原则:自动评审通过原则:物料码不是新物料 ，msc0 使用次数-1 ，如果有mscn
 * 使用次数-1,附加要求为空或者附加要求项都通过审批)
 * 
 * @author Administrator
 * 
 */
public class AutomaticReview {
	public boolean automatic(Connection con, String firstPrdc,
			String msc0UseCount, String mscNUseCount, String addAskNo)
			throws SQLException {
		// 如果成品物料是首次生产,则不自动评审通过
		if (firstPrdc.equals("1")) {
			return false;
		}
		// 如果MSC0使用次数不为-1,则不自动评审通过
		if (!msc0UseCount.equals("-1")) {
			return false;
		}
		// 如果MSCN使用次数不为-1并且不为空,则不自动评审通过
		if (!mscNUseCount.equals("-1") && !mscNUseCount.equals("")) {
			return false;
		}
		// 如果附加要求不为空,并且每一项通过都评审
		if (!addAskNo.equals("")) {
			if (!AutomaticReview.checkAskFlag(con, addAskNo)) {
				return false;
			}
		}
		return true;
	}

	/**
	 * 验证附加要求是否都通过审批
	 * 
	 * @param con
	 *            连接字符串
	 * @param addAskNo
	 *            附加要求编码
	 * @return boolean
	 * @throws SQLException
	 */
	public static boolean checkAskFlag(Connection con, String addAskNo)
			throws SQLException {
		String sql = CoreXmlSqlParsersFactory
				.getSql("AutomaticReview.getAddAskFlag");
		PreparedStatement ps = con.prepareStatement(sql);
		List<String> flags = new ArrayList<String>();
		ps.setObject(1, addAskNo);
		ResultSet rs = ps.executeQuery();
		while (rs.next()) {
			String flag = rs.getString("STDFLAG");
			flags.add(flag);
		}
		rs.close();
		ps.close();
		if (flags.contains("0") || flags.contains("")) {
			return false;
		} else {
			return true;
		}
	}

	/**
	 * 验证压缩比(压缩比计算公式:锻造规格*锻造规格/(外径*外径-(外径-2*壁厚)*(外径-2*壁厚)))
	 * 结果大于等于产品码的压缩比极限值，则必须经过连铸，否则必须经过锻轧
	 * 
	 * @param rollSpecs
	 * @param biltsSpecs
	 * @return
	 * @throws SQLException
	 */
	public static String compressioRatio(Connection con, String dimater,
			String height, String specName, String compressionRatio) {
		double dimaterNum = Double.parseDouble(dimater);
		double heightNum = Double.parseDouble(height);
		double specNameNum = Double.parseDouble(specName);
		// 坯料断面=πD²/4
		double blank = specNameNum * specNameNum;
		// 轧管断面=πD1²/4-πD2²/4 “D1”为轧管外径；“D2”=轧管外径-轧管壁厚×2
		double roll = dimaterNum * dimaterNum - (dimaterNum - heightNum * 2)
				* (dimaterNum - heightNum * 2);
		double ratio = blank / roll;
		if (ratio > Double.parseDouble(compressionRatio)) {
			return "B";
		} else {
			return "C";
		}
	}

	/**
	 * 查询产品码的锻造比极限值
	 */
	public static String getPscRatio(Connection con, String psc)
			throws SQLException {
		String sql = "select t.compression_ratio from com_psc t where t.psc=?";
		PreparedStatement ps = con.prepareStatement(sql);
		ps.setObject(1, psc);
		ResultSet rs = ps.executeQuery();
		String ratio = "";
		if (rs.next()) {
			if (rs.getString("compression_ratio") != null
					&& !rs.getString("compression_ratio").equals("")) {
				ratio = rs.getString("compression_ratio");
			}

		}
		rs.close();
		ps.close();
		return ratio;

	}
}
