package com.steering.pss.plnsaleord.steelMarkingPlan;

import CoreFS.SA06.CoreReturnObject;
import CoreFS.SA06.CoreReturnSortObject;
import com.steering.comm.db.DBCommon;

import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * Created by 朱少波 on 2017/7/31.
 */
public class StoveNoGenerate extends DBCommon {


    /**
     * 电炉炉号生成规则
     *
     * @param PlineCode 电炉产线
     * @param StartDate 开始时间
     * @return 电炉
     * @throws SQLException 异常消息
     */
    public synchronized String StoveNoGenerateByPineCode(String PlineCode, Date StartDate) throws SQLException {

        String prefix = "";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
        String Year = "";
        /*if(Integer.parseInt(sdf.format(StartDate)) < 2024){
    		Year = "2023";
    	}else{
    		Year = sdf.format(StartDate);
    	}*/
        Year = "2024";

        Integer Ini17 = 1;  //默认初始值  正常年份是1   2017接原系统 初始化接原系统最大序号

        if (Integer.parseInt(Year) < 2020) {
        
        // 一炼   0 + Y  +  NNNN   （0 + 年最后一位  + 4位流水)   6位
        if ("C001".equals(PlineCode) || "C002".equals(PlineCode)) {
            prefix = "0" + Year.substring(3, 4);
            Ini17 = "2017".equals(Year) ? 5699 : 1;
        }   // 二炼   YY + 0  +  NNNN   （年最后两位 + 0  + 4位流水)    7位
        else if ("C003".equals(PlineCode) || "C004".equals(PlineCode)) {
            prefix = Year.substring(2, 4) + "0";
            Ini17 = "2017".equals(Year) ? 7280 : 1;
        } // 三炼   YY + 3  +  NNNN   （年最后两位 + 3  + 4位流水)    7位
        else if ("C006".equals(PlineCode) || "C007".equals(PlineCode)) {
            prefix = Year.substring(2, 4) + "3";
            Ini17 = "2017".equals(Year) ? 0 : 1;
        }
        }else{
        	
        	 // 一炼   1 + Y  +  NNNN   （1 + 年最后一位  + 4位流水)   6位
            if ("C001".equals(PlineCode) || "C002".equals(PlineCode)) {
                prefix = "1" + Year.substring(3, 4);
                Ini17 = "2017".equals(Year) ? 5699 : 1;
            }   // 二炼   YY + 0  +  NNNN   （年最后两位 + 0  + 4位流水)    7位
            else if ("C003".equals(PlineCode) || "C004".equals(PlineCode)) {
                prefix = Year.substring(2, 4) + "0";
                Ini17 = "2017".equals(Year) ? 7280 : 1;
            } // 三炼   YY + 3  +  NNNN   （年最后两位 + 3  + 4位流水)    7位
            else if ("C006".equals(PlineCode) || "C007".equals(PlineCode)) {
                prefix = Year.substring(2, 4) + "3";
                Ini17 = "2017".equals(Year) ? 0 : 1;
            }
        	
        	
        }

        CoreReturnObject Result = getDataBySqlID("StoveNoGenerate", new Object[]{prefix, Ini17, prefix});


        List Results =
                ( (CoreReturnSortObject) Result.getResult() ).getResult();

        if (Results == null || Results.size() <= 0) {
            return null;
        }
        return ( (Map<String, Object>) Results.get(0) ).get("STOVE_NO").toString();

    }

    /**
     * 比较是否是使用当前规则    --- 跨年 或者 跨规则
     *
     * @param PlineCode 电炉产线
     * @param Stove     当前炉号
     * @param StartDate 当前时间
     * @return
     */
    public Boolean CompareStove(String PlineCode, String Stove, Date StartDate) {
        String prefix = "";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
        String Year = "";
        /*if(Integer.parseInt(sdf.format(StartDate)) < 2024){
    		Year = "2023";
    	}else{
    		Year = sdf.format(StartDate);
    	}*/
        Year = "2024";


        if (Integer.parseInt(Year) < 2020) {
        
        // 一炼   0 + Y  +  NNNN   （0 + 年最后一位  + 4位流水)   6位
        if ("C001".equals(PlineCode) || "C002".equals(PlineCode)) {
            prefix = "0" + Year.substring(3, 4);
        }   // 二炼   YY + 0  +  NNNN   （年最后两位 + 0  + 4位流水)    7位
        else if ("C003".equals(PlineCode) || "C004".equals(PlineCode)) {
            prefix = Year.substring(2, 4) + "0";
        } // 三炼   YY + 3  +  NNNN   （年最后两位 + 3  + 4位流水)    7位
        else if ("C006".equals(PlineCode) || "C007".equals(PlineCode)) {
            prefix = Year.substring(2, 4) + "3";
        }
        }else{
        	
        	 // 一炼   1 + Y  +  NNNN   （1 + 年最后一位  + 4位流水)   6位
            if ("C001".equals(PlineCode) || "C002".equals(PlineCode)) {
                prefix = "1" + Year.substring(3, 4);
            }   // 二炼   YY + 0  +  NNNN   （年最后两位 + 0  + 4位流水)    7位
            else if ("C003".equals(PlineCode) || "C004".equals(PlineCode)) {
                prefix = Year.substring(2, 4) + "0";
            } // 三炼   YY + 3  +  NNNN   （年最后两位 + 3  + 4位流水)    7位
            else if ("C006".equals(PlineCode) || "C007".equals(PlineCode)) {
                prefix = Year.substring(2, 4) + "3";
            }
        	
        	
        }
        return !"".equals(prefix) && Stove.startsWith(prefix);
    }


    /**
     * 判定炉号 生成规则
     *
     * @param PlineCode 电炉产线
     * @param Stove     电炉炉号/熔炼炉号
     * @param Gp        分切数
     * @param ProMoth   当前年月
     * @return
     */
    public String GetNewJudgeStove(String PlineCode, String Stove, Long Gp, String ProMoth) {
        String prefix = "";
        String Year = "2024";

        if ("".equals(Stove)) return "";

        /*if (ProMoth.length() >= 4) {
        	//2022年12月25号提前启用2023年炉号
        	if(Integer.parseInt(ProMoth.substring(0, 4)) < 2024){
        		Year = "2023";
        	}else{
        		Year = ProMoth.substring(0, 4);
        	}
        } else {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
            if(Integer.parseInt(sdf.format(new Date())) < 2024){
        		Year = "2023";
        	}else{
        		Year = sdf.format(new Date());
        	}
        }*/


        if (Gp==1)
        {
            if ("C001".equals(PlineCode) || "C002".equals(PlineCode)) {
                return "1"+ Year.substring(3,4) + Stove.substring(Stove.length()-4) ;
            } else if ("C003".equals(PlineCode) || "C004".equals(PlineCode)) {
                return "5"+ Year.substring(3,4) + Stove.substring(Stove.length()-4) ;
            } else if ("C006".equals(PlineCode) || "C007".equals(PlineCode)) {
                return "3"+ Year.substring(3,4) + Stove.substring(Stove.length()-4) ;
            } else {
                return "";
            }

        }
        else {

            String MaxPre, MinPre;
            Integer Ini17 = 1;  //默认初始值  正常年份是1   2017接原系统 初始化接原系统最大序号

            //2020前原规则
            if (Integer.parseInt(Year) < 2020) {

                //多分切 用各种区间流水  1连0000-3999  2炼 3炼公用区间  4000 -9999


                if ("C001".equals(PlineCode) || "C002".equals(PlineCode)) {
                    MinPre = Year.substring(2, 4) + "0000";
                    MaxPre = Year.substring(2, 4) + "3999";
                    Ini17 = "2017".equals(Year) ? 171445 : Integer.parseInt(MinPre);
                } else {
                    MinPre = Year.substring(2, 4) + "4000";
                    MaxPre = Year.substring(2, 4) + "9999";
                    Ini17 = "2017".equals(Year) ? 175825 : Integer.parseInt(MinPre);
                }
            } else {

                // 一练   0 + 年最后一位  + 4位流水
                if ("C001".equals(PlineCode) || "C002".equals(PlineCode)) {
                    MinPre = "0" + Year.substring(3, 4) + "0000";
                    MaxPre = "0" + Year.substring(3, 4) + "3999";
                    //MinPre = "0" + Year.substring(3, 4) + "9000";
                    //MaxPre = "0" + Year.substring(3, 4) + "9999";

                    // 二炼
                } else if ("C003".equals(PlineCode) || "C004".equals(PlineCode)) {
                    MinPre = "0" + Year.substring(3, 4) + "4000";
                    MaxPre = "0" + Year.substring(3, 4) + "9999";
                    //MaxPre = "0" + Year.substring(3, 4) + "8999";
                } else if ("C006".equals(PlineCode) || "C007".equals(PlineCode)) {
                    MinPre = "0" + Year.substring(3, 4) + "4000";
                    MaxPre = "0" + Year.substring(3, 4) + "9999";
                    //MaxPre = "0" + Year.substring(3, 4) + "8999";
                } else {
                    return null;
                }

                Ini17 = Integer.parseInt(MinPre);
            }


            CoreReturnObject Result = getDataBySqlID("JudgeStoveNoGenerate", new Object[]{Ini17, MinPre, MaxPre});


            List Results =
                    ( (CoreReturnSortObject) Result.getResult() ).getResult();

            if (Results == null || Results.size() <= 0) {
                return null;
            }
            return ( (Map<String, Object>) Results.get(0) ).get("JUDGE_STOVE_NO").toString();
        }
    }




    /**
     * 打印炉号/标识炉号 生成规则
     *
     * @param PlineCode 电炉产线
     * @param Stove     电炉炉号/熔炼炉号
     * @param Gp        分切数
     * @param ProMoth   当前年月
     * @return
     */
    public String GePrintStove(String PlineCode, String Stove, Long Gp, String ProMoth) {
        String prefix = "";
        String Year = "2024";
        if(Gp==0 || Gp==99) return "";

        if ("".equals(Stove)) return "";

        /*if (ProMoth.length() >= 4) {
            //Year = ProMoth.substring(0, 4);
          //2021年12月14号提前启用2022年炉号
        	if(Integer.parseInt(ProMoth.substring(0, 4)) < 2024){
        		Year = "2023";
        	}else{
        		Year = ProMoth.substring(0, 4);
        	}
        } else {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
            //Year = sdf.format(new Date());
            if(Integer.parseInt(sdf.format(new Date())) < 2024){
        		Year = "2023";
        	}else{
        		Year = sdf.format(new Date());
        	}
        }*/


        if (Integer.parseInt(Year) < 2020) {

            //多分切 用各种区间流水  1连0000-3999  2炼 3炼公用区间  4000 -9999


            if (Gp <= 1) {
                return ( "C001".equals(PlineCode) ? "0" : "1" ) + Stove.substring(Stove.length() - 6);
            } else {
                return Gp + Stove.substring(Stove.length() - 6);
            }
        } else {


            // 一练   0 + 年最后一位  + 4位流水
            if ("C001".equals(PlineCode) || "C002".equals(PlineCode)) {


                return Gp + "1" + Year.substring(3, 4) + Stove.substring(Stove.length() - 4);
                // 二炼
            } else if ("C003".equals(PlineCode) || "C004".equals(PlineCode)) {
                if (Gp == 1)
                    return Year.substring(2, 4) + "0" + Stove.substring(Stove.length() - 4);

                if (Gp == 2)
                    return "0" + Year.substring(3, 4) + "0" + Stove.substring(Stove.length() - 4);

                return Gp + Year.substring(3, 4) + "0" + Stove.substring(Stove.length() - 4);

            } else if ("C006".equals(PlineCode) || "C007".equals(PlineCode)) {
                if (Gp == 1)
                    return Year.substring(2, 4) + "3" + Stove.substring(Stove.length() - 4);

                if (Gp == 2)
                    return "0" + Year.substring(3, 4) + "3" + Stove.substring(Stove.length() - 4);

                return Gp + Year.substring(3, 4) + "3" + Stove.substring(Stove.length() - 4);
            } else {
                return null;
            }

        }

    }
}
