package itn.let.utl.user.service;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import com.fasterxml.jackson.databind.ObjectMapper;

import itn.let.kakao.kakaoComm.KakaoVO;

@Component
public class CheckNoServiceCommon{
	
	/** 비즈 회원 아이디 */
	@Value("#{globalSettings['Globals.mjon.biz.id']}")
	private String mjonBizId;
	
	/** 비즈 회원 API 키*/
	@Value("#{globalSettings['Globals.mjon.biz.kakao.apiKey']}")
	private String mjonBizKakaoApiKey;
	
	/** 비즈 JSON 파일저장 경로*/
	@Value("#{globalSettings['Globals.mjon.kakao.dir']}")
	private String mjonBizJsonDir;
	


	/**
	 * @param kakaoVO
	 * @return
	 * 국세청 사업자등록번호 상태 조회
	 * I : 사업자 등록 번호 - b_no
	 * O : 납세자상태(코드)
	 *  b_stt_cd	string
	 *  default: 01
	 *  xml: OrderedMap { "name": "BSttCd" }
	 *  납세자상태(코드):
	 *  01: 계속사업자,
	 *  02: 휴업자,
	 *  03: 폐업자
	 * https://www.data.go.kr/data/15081808/openapi.do#/%EC%82%AC%EC%97%85%EC%9E%90%EB%93%B1%EB%A1%9D%20%EC%83%81%ED%83%9C%EC%A1%B0%ED%9A%8C%20API/status
	 */
	public KakaoVO BizNoCheckApiEx2(
			KakaoVO kakaoVO
			, String p_b_no		//사업자등록번호
			, String p_b_nm		//업체명
			, String p_p_nm		//대표자명
			) {
		int responscCode = 0;
		String s_ret	=	"";
		
		try {
			
			
			String sendUrl = "https://kapi.ppurio.com";
			sendUrl = "https://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey=R3ueuGhIUlsnCPeJKxKaxlpoEPPmkkL%2BOaDLvOyggrXtHPuxbWIUtlxAwnzhgUq1Hx%2Fc3gpbi%2BoLUq2Dt6rHBg%3D%3D";
			
			
			String[] s_arr	=	{p_b_no};
			
			HashMap<String, Object> resultMap = new HashMap();
			resultMap.put("b_no", s_arr);    //파라미터 설정
			
			ObjectMapper mapper = new ObjectMapper();
			String json = mapper.writeValueAsString(resultMap);    //convert map to JSON String(JSON으로 변환)

			System.out.println("json");
			System.out.println(json);
			System.out.println("json");
			
			//step1.상태조회
			String msgMap = statusREST(sendUrl, json);			
			s_ret	=	this.jsonParser4Status(msgMap);	//""	:	오류,	"01"-부가가치세 일반관세자
			
			String[] s_arr_ret	=	s_ret.split("[|]");
			
			
			if (s_arr_ret.length==2) {
				if (!s_arr_ret[0].equals("01")) {
					kakaoVO.setBizReturnCode("101");
					//kakaoVO.setBizReturnCode(Integer.parseInt(s_arr_ret[0]));
					kakaoVO.setBizReturnMsg(s_arr_ret[1]);
					return kakaoVO;					
				}
			}else {
				kakaoVO.setBizReturnCode("102");
				kakaoVO.setBizReturnMsg("알수없는오류(S1)");
				return kakaoVO;
			}
			
			
			//step2.bizno 결과 clawling - 설립일 가져오기
			sendUrl = "https://www.bizno.net/article/"+p_b_no;
			//sendUrl = "https://www.bizno.net/article/6538700857";

			Document doc = null;
			Elements e_els	=	null;
						
			try {				
				doc = this.bizNoCrawling(sendUrl);
				e_els	=	this.extractElements(doc, "div.details div.titles");			
				s_ret	=	this.printElements(e_els);				
			}catch(Exception ex) {
				s_ret	=	"";
			}

			
			System.out.println("s_ret");
			System.out.println(s_ret);
			
			if ("".equals(s_ret)) {
				kakaoVO.setBizReturnCode("201");
				kakaoVO.setBizReturnMsg("알수없는오류(B1)");
				return kakaoVO;				
			}

			
			e_els	=	this.extractElements(doc, "div.details table tbody tr");
			s_ret	=	this.findElementsData(e_els, "설립일").replaceAll("-", "");
			
			if ("".equals(s_ret)) {
				kakaoVO.setBizReturnCode("202");
				kakaoVO.setBizReturnMsg("알수없는오류(B2)");
				return kakaoVO;				
			}
			
			
			//step3.진위확인
			resultMap.put("b_no", p_b_no);    //파라미터 설정
			resultMap.put("start_dt", s_ret);    //개업일자
			resultMap.put("p_nm", p_p_nm);    	//대표자명
			resultMap.put("b_nm", p_b_nm);    	//회사명
			
			sendUrl = "https://api.odcloud.kr/api/nts-businessman/v1/validate?serviceKey=R3ueuGhIUlsnCPeJKxKaxlpoEPPmkkL%2BOaDLvOyggrXtHPuxbWIUtlxAwnzhgUq1Hx%2Fc3gpbi%2BoLUq2Dt6rHBg%3D%3D";

			
			HashMap<String, Object> resultMapVal = new HashMap();
			
			//ObjectMapper mapper = new ObjectMapper();
			json = mapper.writeValueAsString(resultMap);    //convert map to JSON String(JSON으로 변환)

			System.out.println("json");
			Object[] s_arr_val	=	{resultMap};
			//String[] s_arr	=	{"6538700858"};
			System.out.println(json);
			System.out.println("json");
			
			resultMapVal.put("businesses", s_arr_val);    //파라미터 설정
			
			json = mapper.writeValueAsString(resultMapVal);    //convert map to JSON String(JSON으로 변환)
			
			System.out.println("jsonVal");
			System.out.println(json);
			System.out.println("jsonVal");
			
			msgMap = this.validateREST(sendUrl, json);			
			s_ret	=	this.jsonParser4Validate(msgMap);		      
			
			String[] s_arr_ret_2	=	s_ret.split("[|]");
			
			System.out.println("s_arr_ret_2[0]");
			System.out.println(s_arr_ret_2[0]);
			System.out.println(s_arr_ret_2[1]);
			
			if (s_arr_ret_2.length==2) {
				if (!s_arr_ret_2[0].equals("01")) {
					kakaoVO.setBizReturnCode("301");
					kakaoVO.setBizReturnMsg(s_arr_ret_2[1]);
					return kakaoVO;					
				}
			}else {
				kakaoVO.setBizReturnCode("302");
				kakaoVO.setBizReturnMsg("알수없는오류(V)");
				return kakaoVO;
			}
			
			//kakaoVO.setBizReturnCode(Integer.parseInt(s_arr_ret_2[0]));
			kakaoVO.setBizReturnCode(s_arr_ret_2[0]);
			kakaoVO.setBizReturnMsg(s_arr_ret_2[1]);		

			
		} catch (Exception e) {
			e.printStackTrace();
			//kakaoVO.setBizReturnCode(-1);
			kakaoVO.setBizReturnCode("-1");
			
		}
		
		return kakaoVO;
	}

	/**
	 * @param kakaoVO
	 * @return
	 * 국세청 사업자등록번호 상태 조회
	 * I : 사업자 등록 번호 - b_no
	 * O : 납세자상태(코드)
	 *  b_stt_cd	string
	 *  default: 01
	 *  xml: OrderedMap { "name": "BSttCd" }
	 *  납세자상태(코드):
	 *  01: 계속사업자,
	 *  02: 휴업자,
	 *  03: 폐업자
	 * https://www.data.go.kr/data/15081808/openapi.do#/%EC%82%AC%EC%97%85%EC%9E%90%EB%93%B1%EB%A1%9D%20%EC%83%81%ED%83%9C%EC%A1%B0%ED%9A%8C%20API/status
	 */
	public KakaoVO BizNoCheckApiEx3(
			KakaoVO kakaoVO
			, String p_b_no		//사업자등록번호
			, String p_b_nm		//업체명
			, String p_p_nm		//대표자명
			, String p_start_dt	//설립일(개업일)
			) {
		int responscCode = 0;
		String s_ret	=	"";
		
		try {
			
			
			String sendUrl = "https://kapi.ppurio.com";
			sendUrl = "https://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey=R3ueuGhIUlsnCPeJKxKaxlpoEPPmkkL%2BOaDLvOyggrXtHPuxbWIUtlxAwnzhgUq1Hx%2Fc3gpbi%2BoLUq2Dt6rHBg%3D%3D";
			
			
			HashMap<String, Object> resultMap = new HashMap();
						
			//step3.진위확인
			resultMap.put("b_no", p_b_no);    //파라미터 설정
			resultMap.put("start_dt", p_start_dt);    //개업일자
			resultMap.put("p_nm", p_p_nm);    	//대표자명
			resultMap.put("b_nm", p_b_nm);    	//회사명
			
			sendUrl = "https://api.odcloud.kr/api/nts-businessman/v1/validate?serviceKey=R3ueuGhIUlsnCPeJKxKaxlpoEPPmkkL%2BOaDLvOyggrXtHPuxbWIUtlxAwnzhgUq1Hx%2Fc3gpbi%2BoLUq2Dt6rHBg%3D%3D";

			
			HashMap<String, Object> resultMapVal = new HashMap();
			
			ObjectMapper mapper = new ObjectMapper();
			String json = mapper.writeValueAsString(resultMap);    //convert map to JSON String(JSON으로 변환)

			System.out.println("json");
			Object[] s_arr_val	=	{resultMap};
			//String[] s_arr	=	{"6538700858"};
			System.out.println(json);
			System.out.println("json");
			
			resultMapVal.put("businesses", s_arr_val);    //파라미터 설정
			
			json = mapper.writeValueAsString(resultMapVal);    //convert map to JSON String(JSON으로 변환)
			
			System.out.println("jsonVal");
			System.out.println(json);
			System.out.println("jsonVal");
			
			String msgMap = this.validateREST(sendUrl, json);			
			s_ret	=	this.jsonParser4Validate(msgMap);		      
			
			String[] s_arr_ret_2	=	s_ret.split("[|]");
			
			System.out.println("s_arr_ret_2[0]");
			System.out.println(s_arr_ret_2[0]);
			System.out.println(s_arr_ret_2[1]);
			
			if (s_arr_ret_2.length==2) {
				if (!s_arr_ret_2[0].equals("01")) {
					kakaoVO.setBizReturnCode("301");
					kakaoVO.setBizReturnMsg(s_arr_ret_2[1]);
					return kakaoVO;					
				}
			}else {
				kakaoVO.setBizReturnCode("302");
				kakaoVO.setBizReturnMsg("알수없는오류(V)");
				return kakaoVO;
			}
			
			//kakaoVO.setBizReturnCode(Integer.parseInt(s_arr_ret_2[0]));
			kakaoVO.setBizReturnCode(s_arr_ret_2[0]);
			kakaoVO.setBizReturnMsg(s_arr_ret_2[1]);		

			
		} catch (Exception e) {
			e.printStackTrace();
			//kakaoVO.setBizReturnCode(-1);
			kakaoVO.setBizReturnCode("-1");
			
		}
		
		return kakaoVO;
	}
	
	/**
	 * @param kakaoVO
	 * @return
	 * 국세청 사업자등록번호 상태 조회
	 * I : 사업자 등록 번호 - b_no
	 * O : 납세자상태(코드)
	 *  b_stt_cd	string
	 *  default: 01
	 *  xml: OrderedMap { "name": "BSttCd" }
	 *  납세자상태(코드):
	 *  -1:알수없는 오류
	 *  0:국세청에 등록되지 않은 사업자등록번호입니다.
	 *  01: 계속사업자,
	 *  02: 휴업자,
	 *  03: 폐업자
	 * https://www.data.go.kr/data/15081808/openapi.do#/%EC%82%AC%EC%97%85%EC%9E%90%EB%93%B1%EB%A1%9D%20%EC%83%81%ED%83%9C%EC%A1%B0%ED%9A%8C%20API/status
	 */
	public KakaoVO BizNoAPICheckStep1(
			KakaoVO kakaoVO
			, String p_b_no		//사업자등록번호
			) {
		//int responscCode = 0;
		String s_ret	=	"";
		
		try {
			String sendUrl = "https://kapi.ppurio.com";
			sendUrl = "https://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey=R3ueuGhIUlsnCPeJKxKaxlpoEPPmkkL%2BOaDLvOyggrXtHPuxbWIUtlxAwnzhgUq1Hx%2Fc3gpbi%2BoLUq2Dt6rHBg%3D%3D";
			
			
			String[] s_arr	=	{p_b_no};
			
			HashMap<String, Object> resultMap = new HashMap();
			resultMap.put("b_no", s_arr);    //파라미터 설정
			
			ObjectMapper mapper = new ObjectMapper();
			String json = mapper.writeValueAsString(resultMap);    //convert map to JSON String(JSON으로 변환)

			//System.out.println("json");
			//System.out.println(json);
			//System.out.println("json");
			
			//step1.상태조회
			String msgMap = statusREST(sendUrl, json);			
			s_ret	=	this.jsonParser4Status(msgMap);	//""	:	오류,	"01"-부가가치세 일반관세자
			
			String[] s_arr_ret	=	s_ret.split("[|]");
						
			if (s_arr_ret.length==2) {				
				if ("".equals(s_arr_ret[0])) {
					kakaoVO.setBizReturnCode("0");
					kakaoVO.setBizReturnMsg(s_arr_ret[1]);
				}else {
					//kakaoVO.setBizReturnCode(Integer.parseInt(s_arr_ret[0]));
					kakaoVO.setBizReturnCode(s_arr_ret[0]);
					kakaoVO.setBizReturnMsg(s_arr_ret[1]);					
				}				
				
			}else {
				kakaoVO.setBizReturnCode("-2");
				kakaoVO.setBizReturnMsg("알수없는오류(S2)");	//구문오류
				System.out.println("알수없는오류(S2)");
				//return kakaoVO;
			}
						
		} catch (Exception e) {
			e.printStackTrace();
			kakaoVO.setBizReturnCode("-1");
			kakaoVO.setBizReturnMsg("알수없는오류(S1)");	//구문오류
			System.out.println("알수없는오류(S1)");
			
		}
		
		return kakaoVO;
	}
	
	/**
	 * @param kakaoVO
	 * @return
	 * 국세청 사업자등록번호 상태 조회
	 * I : 사업자 등록 번호 - b_no
	 * O : 납세자상태(코드)
	 *  b_stt_cd	string
	 *  default: 01
	 *  xml: OrderedMap { "name": "BSttCd" }
	 *  납세자상태(코드):
     * STEP1. valid : 
     * 					01 	-	확인 가능
     * 					02	-	확인할 수 없습니다.
     * 					00	-	알수없는오류(0V)
     * 
     * STEP2. 사업자등록번호 확인 :  	
     * 	            	 *  -1:알수없는 오류
	            	 *  0:국세청에 등록되지 않은 사업자등록번호입니다.
	            	 *  11: 계속사업자,
	            	 *  12: 휴업자,
	            	 *  13: 폐업자
	 * https://www.data.go.kr/data/15081808/openapi.do#/%EC%82%AC%EC%97%85%EC%9E%90%EB%93%B1%EB%A1%9D%20%EC%83%81%ED%83%9C%EC%A1%B0%ED%9A%8C%20API/status
	 */
	public KakaoVO BizNoAPICheckStep3(
			KakaoVO kakaoVO
			, String p_b_no		//사업자등록번호
			, String p_b_nm		//업체명
			, String p_p_nm		//대표자명
			, String p_start_dt	//설립일(개업일)
			) {
		int responscCode = 0;
		String s_ret	=	"";
		
		try {
			
			
			String sendUrl = "https://kapi.ppurio.com";
			sendUrl = "https://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey=R3ueuGhIUlsnCPeJKxKaxlpoEPPmkkL%2BOaDLvOyggrXtHPuxbWIUtlxAwnzhgUq1Hx%2Fc3gpbi%2BoLUq2Dt6rHBg%3D%3D";
			
			
			HashMap<String, Object> resultMap = new HashMap();
						
			//step3.진위확인
			resultMap.put("b_no", p_b_no);    //파라미터 설정
			resultMap.put("start_dt", p_start_dt);    //개업일자
			resultMap.put("p_nm", p_p_nm);    	//대표자명
			resultMap.put("b_nm", p_b_nm);    	//회사명
			
			sendUrl = "https://api.odcloud.kr/api/nts-businessman/v1/validate?serviceKey=R3ueuGhIUlsnCPeJKxKaxlpoEPPmkkL%2BOaDLvOyggrXtHPuxbWIUtlxAwnzhgUq1Hx%2Fc3gpbi%2BoLUq2Dt6rHBg%3D%3D";

			
			HashMap<String, Object> resultMapVal = new HashMap();
			
			ObjectMapper mapper = new ObjectMapper();
			String json = mapper.writeValueAsString(resultMap);    //convert map to JSON String(JSON으로 변환)

			System.out.println("json");
			Object[] s_arr_val	=	{resultMap};
			//String[] s_arr	=	{"6538700858"};
			System.out.println(json);
			System.out.println("json");
			
			resultMapVal.put("businesses", s_arr_val);    //파라미터 설정
			
			json = mapper.writeValueAsString(resultMapVal);    //convert map to JSON String(JSON으로 변환)
			
			System.out.println("jsonVal");
			System.out.println(json);
			System.out.println("jsonVal");
			
			String msgMap = this.validateREST(sendUrl, json);			
			s_ret	=	this.jsonParser4ValidSttCD(msgMap);		      
			
			System.out.println("s_ret========");
			System.out.println(s_ret);
			System.out.println(s_ret);
			
			String[] s_arr_ret_2	=	s_ret.split("[|]");
						
			System.out.println("s_arr_ret_2[0]");
			System.out.println(s_arr_ret_2.length);
			System.out.println(s_arr_ret_2[0]);
			System.out.println(s_arr_ret_2[1]);
			System.out.println(s_arr_ret_2[2]);
			System.out.println("s_arr_ret_2[0]");
						
			if (s_arr_ret_2.length==3) {
				if (s_arr_ret_2[0].equals("01")) {
					
					if (s_arr_ret_2[1].equals("01")) {
						kakaoVO.setBizReturnCode("11");
						kakaoVO.setBizReturnMsg(s_arr_ret_2[2]);
											
					}else if (s_arr_ret_2[1].equals("02")) {
						kakaoVO.setBizReturnCode("12");
						kakaoVO.setBizReturnMsg(s_arr_ret_2[2]);

					}else if (s_arr_ret_2[1].equals("03")) {
						kakaoVO.setBizReturnCode("13");
						kakaoVO.setBizReturnMsg(s_arr_ret_2[2]);
						
					}else {
						//kakaoVO.setBizReturnCode(Integer.parseInt(s_arr_ret_2[1]));
						kakaoVO.setBizReturnCode(s_arr_ret_2[1]);
						kakaoVO.setBizReturnMsg(s_arr_ret_2[2]);						
					}
										
				}else {
					//kakaoVO.setBizReturnCode(Integer.parseInt(s_arr_ret_2[0]));
					kakaoVO.setBizReturnCode(s_arr_ret_2[0]);
					kakaoVO.setBizReturnMsg(s_arr_ret_2[2]);
				}
			}else {
				//kakaoVO.setBizReturnCode(4);
				kakaoVO.setBizReturnCode("4");
				kakaoVO.setBizReturnMsg("검증실패(V4)");
				return kakaoVO;
			}
			
			//kakaoVO.setBizReturnCode(Integer.parseInt(s_arr_ret_2[0]));
			//kakaoVO.setBizReturnMsg(s_arr_ret_2[1]);
			
		} catch (Exception e) {
			e.printStackTrace();
			kakaoVO.setBizReturnCode("-1");
			kakaoVO.setBizReturnMsg("검증실패(V-1)");
			
		}
		
		return kakaoVO;
	}
	/////////////////////////////////////////////////////////////////////////////
	
	//rest api 데이터 가져오기	-	상태조회
	private String statusREST(String sendUrl, String jsonValue) throws IllegalStateException {

		String inputLine = null;
		StringBuffer outResult = new StringBuffer();

		  try{
			//logger.debug("REST API Start");
			  System.out.println("REST API Start");
			URL url = new URL(sendUrl);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setDoOutput(true);
			conn.setRequestMethod("POST");
			conn.setRequestProperty("Content-Type", "application/json");
			conn.setRequestProperty("Accept-Charset", "UTF-8"); 
			conn.setConnectTimeout(10000);
			conn.setReadTimeout(10000);
		      
			OutputStream os = conn.getOutputStream();
			os.write(jsonValue.getBytes("UTF-8"));
			os.flush();
		    
			System.out.println(jsonValue.getBytes("UTF-8").toString());
			
			// 리턴된 결과 읽기
			BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
			while ((inputLine = in.readLine()) != null) {
				outResult.append(inputLine);
				
				System.out.println(inputLine);
				
			}
		    
			
			conn.disconnect();
			System.out.println("REST API End");
			//logger.debug("REST API End");        
		  }catch(Exception e){
//		      logger.error(e.getMessage(), e);
		      e.printStackTrace();
		  }	
		  System.out.println("outResult.toString()");
		  System.out.println(outResult.toString());
		  System.out.println("outResult.toString()");
		  return outResult.toString();
	}
	
	
	//rest api 데이터 가져오기	
	private String jsonParser4Status(String p_parserData) throws Exception {

		String s_ret	=	"";
		
        try {
        	 
            JSONParser jsonParser = new JSONParser();
             
            //JSON데이터를 넣어 JSON Object 로 만들어 준다.
            JSONObject jsonObject = (JSONObject) jsonParser.parse(p_parserData);
             
            //books의 배열을 추출
            JSONArray bookInfoArray = (JSONArray) jsonObject.get("data");
 
            System.out.println("* DATAS *");

            /*
            for(int i=0; i<bookInfoArray.size(); i++){
 
                System.out.println("=BOOK_"+i+" ===========================================");
                 
                //배열 안에 있는것도 JSON형식 이기 때문에 JSON Object 로 추출
                JSONObject bookObject = (JSONObject) bookInfoArray.get(i);
                 
                //JSON name으로 추출
                System.out.println("bookInfo: name==>"+bookObject.get("b_no"));
                System.out.println("bookInfo: writer==>"+bookObject.get("b_stt"));
                System.out.println("bookInfo: price==>"+bookObject.get("b_stt_cd"));
                System.out.println("bookInfo: genre==>"+bookObject.get("tax_type"));
                System.out.println("bookInfo: publisher==>"+bookObject.get("tax_type_cd"));
 
            }
            */


            if (bookInfoArray.size()>0) {
                //배열 안에 있는것도 JSON형식 이기 때문에 JSON Object 로 추출
                JSONObject bookObject = (JSONObject) bookInfoArray.get(0);
                 
                s_ret	=	(String)bookObject.get("b_stt_cd")+"|"+(String)bookObject.get("tax_type");                
                
            }
            
            
            /*
            JSONArray personInfoArray = (JSONArray) jsonObject.get("persons");
 
            System.out.println("\r\n* PERSONS *");
 
            for(int i=0; i<personInfoArray.size(); i++){
 
                System.out.println("=PERSON_"+i+" ===========================================");
                JSONObject personObject = (JSONObject) personInfoArray.get(i);
                System.out.println("personInfo: name==>"+personObject.get("name"));
                System.out.println("personInfo: age==>"+personObject.get("age"));
                System.out.println("personInfo: gender==>"+personObject.get("gender"));
                System.out.println("personInfo: nickname==>"+personObject.get("nickname"));
 
            }
            */
 
        }catch(Exception ex) {
        //} catch (ParseException e) {
            // TODO Auto-generated catch block
        	s_ret	=	"|알수없는오류(4S)";
            ex.printStackTrace();            
        }
        
        System.out.println("s_ret");
        System.out.println(s_ret);
        System.out.println(s_ret);
        
        return s_ret;
        
	}	
	
	//rest api 데이터 가져오기	-	진위확인
	private String validateREST(String sendUrl, String jsonValue) throws IllegalStateException {

		String inputLine = null;
		StringBuffer outResult = new StringBuffer();

		  try{
			//logger.debug("REST API Start");
			  System.out.println("REST API Start");
			URL url = new URL(sendUrl);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setDoOutput(true);
			conn.setRequestMethod("POST");
			conn.setRequestProperty("Content-Type", "application/json");
			conn.setRequestProperty("Accept-Charset", "UTF-8"); 
			conn.setConnectTimeout(10000);
			conn.setReadTimeout(10000);
		      
			OutputStream os = conn.getOutputStream();
			os.write(jsonValue.getBytes("UTF-8"));
			os.flush();
		    
			System.out.println(jsonValue.getBytes("UTF-8").toString());
			
			// 리턴된 결과 읽기
			BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
			while ((inputLine = in.readLine()) != null) {
				outResult.append(inputLine);
				
				System.out.println(inputLine);
				
			}
		    
			
			conn.disconnect();
			System.out.println("REST API End");
			//logger.debug("REST API End");        
		  }catch(Exception e){
//		      logger.error(e.getMessage(), e);
		      e.printStackTrace();
		  }	
		  System.out.println("outResult.toString()");
		  System.out.println(outResult.toString());
		  System.out.println("outResult.toString()");
		  return outResult.toString();
	}
	
	//rest api 데이터 가져오기	
	private String jsonParser4Validate(String p_parserData) throws Exception {

		String s_ret	=	"";
		
        try {
        	 
            JSONParser jsonParser = new JSONParser();
             
            //JSON데이터를 넣어 JSON Object 로 만들어 준다.
            JSONObject jsonObject = (JSONObject) jsonParser.parse(p_parserData);
             
            //books의 배열을 추출
            JSONArray bookInfoArray = (JSONArray) jsonObject.get("data");
  
            if (bookInfoArray.size()>0) {
                //배열 안에 있는것도 JSON형식 이기 때문에 JSON Object 로 추출
                JSONObject bookObject = (JSONObject) bookInfoArray.get(0);
                 
                //books의 배열을 추출
                JSONObject bookStatusObject = (JSONObject) bookObject.get("status");
                
                //s_ret	=	(String)bookStatusObject.get("b_stt_cd")+"|"+(String)bookStatusObject.get("tax_type");
                s_ret	=	(String)bookStatusObject.get("b_stt_cd")+"|"+(String)bookStatusObject.toString();
                                
            }
            
 
        }catch(Exception ex) {
        //} catch (ParseException e) {
            // TODO Auto-generated catch block
            ex.printStackTrace();
            
            s_ret	=	"|알수없는오류(4V)";
        }
        
        return s_ret;
	}	
	
	//rest api 데이터 가져오기	
	/**
	 * @param p_parserData
	 * @return valid|stt_cd
	 * valid	-	01	정상
	 * 				02	오류
	 * stt_cd	-	01	-	계속사업자
	 * 				02	-	휴업
	 * 				03	-	폐업
	 * @throws Exception
	 */
	private String jsonParser4ValidSttCD(String p_parserData) throws Exception {

		String s_ret	=	"";
		
        try {
        	 
            JSONParser jsonParser = new JSONParser();
             
            //JSON데이터를 넣어 JSON Object 로 만들어 준다.
            JSONObject jsonObject = (JSONObject) jsonParser.parse(p_parserData);
             
            //books의 배열을 추출
            JSONArray bookInfoArray = (JSONArray) jsonObject.get("data");
  
            if (bookInfoArray.size()>0) {
                //배열 안에 있는것도 JSON형식 이기 때문에 JSON Object 로 추출
                JSONObject bookObject = (JSONObject) bookInfoArray.get(0);
                s_ret	=	(String)bookObject.get("valid");
                 
                
                if ("01".equals(s_ret)) {
                    //books의 배열을 추출
                    JSONObject bookStatusObject = (JSONObject) bookObject.get("status");
                    
                    //s_ret	=	(String)bookStatusObject.get("b_stt_cd")+"|"+(String)bookStatusObject.get("tax_type");
                    s_ret	=	s_ret	
                    		+	"|"		+	(String)bookStatusObject.get("b_stt_cd")
                    		+	"|"		+	(String)bookStatusObject.get("b_stt");
                    
                }else if ("02".equals(s_ret)) {
                	try{
                        //books의 배열을 추출
                        String s_msg	= (String) bookObject.get("valid_msg");
                        
                        //s_ret	=	(String)bookStatusObject.get("b_stt_cd")+"|"+(String)bookStatusObject.get("tax_type");
                        s_ret	=	s_ret	
                        		+	"|02"
                        		+	"|(국세청 : 02 - "		+	s_msg	+")";
                        
                    }catch(Exception ex) {
                        //} catch (ParseException e) {
                            // TODO Auto-generated catch block
                            ex.printStackTrace();
                            
                            s_ret	=	"00|02|(국세청 : 02 - valid_msg 없음)";
                    }
                	
                }else{                	
                	s_ret	=	" |"+s_ret+"| "+s_ret;                	
                }                                
            }
            
        }catch(Exception ex) {
        //} catch (ParseException e) {
            // TODO Auto-generated catch block
            ex.printStackTrace();
            
            s_ret	=	"00| |국세청 검증결과 데이터 파싱실패(0V)";
        }
                
        return s_ret;
	}	
	
	//rest api 데이터 가져오기	-	사이트 크롤링 
	private Document bizNoCrawling(String sendUrl) throws Exception {

		String s_url	=	sendUrl;
		Document doc = null;        //Document에는 페이지의 전체 소스가 저장된다

		try{
			//2.페이지 호출
			doc = Jsoup.connect(s_url).get();
			
		}catch(Exception ex){
			ex.printStackTrace();			
		}
		
		return doc;		
	}

	//rest api 데이터 가져오기	-	사이트 크롤링 
	private Elements extractElements(
			Document p_doc
			, String p_selectQuery
			) throws Exception {

		//3.상세 url 추출
		Elements elements = p_doc.select(p_selectQuery);
		
		return elements;		
	}

	//rest api 데이터 가져오기	-	사이트 크롤링 글자 찾기 
	private String findElementsData(
			Elements p_element
			, String p_findData
			) throws Exception {

		//3.상세 data 값 찾기
		String s_ret	=	"";
		
		// SOLR 결과값 디크립트 부분
		for (int i=0;i<p_element.size();i++) {
			Element f_ele	=	p_element.get(i);
			if (f_ele.select("th").text().indexOf(p_findData)>-1) {
				if (!"".equals(f_ele.select("td").text())) {
					s_ret	=	f_ele.select("td").text();	
				}				
			}
		}
				
		return s_ret;		
	}
	
	//rest api 데이터 가져오기	-	사이트 크롤링 
	private String printElements(
			Elements	p_els			
			) throws Exception {

		String s_ret	=	"";
		//3.상세 url 추출
		for (int i=0;i<p_els.size();i++) {
			if (!"".equals(p_els.get(i).text())) {
				s_ret	=	p_els.get(i).text();	
			}
		}			
		
		return s_ret;
	}
	
	//rest api 데이터 가져오기	
	private void jsonBizNoParser(String p_parserData) throws Exception {

        try {
        	
        	System.out.println("p_parserData");
        	System.out.println(p_parserData);
        	System.out.println("p_parserData");
        	
            JSONParser jsonParser = new JSONParser();
             
            //JSON데이터를 넣어 JSON Object 로 만들어 준다.
            JSONObject jsonObject = (JSONObject) jsonParser.parse(p_parserData);
             
            //books의 배열을 추출
            JSONArray bookInfoArray = (JSONArray) jsonObject.get("data");
 
            System.out.println("* DATAS *");
 
            for(int i=0; i<bookInfoArray.size(); i++){
 
                System.out.println("=BOOK_"+i+" ===========================================");
                 
                //배열 안에 있는것도 JSON형식 이기 때문에 JSON Object 로 추출
                JSONObject bookObject = (JSONObject) bookInfoArray.get(i);
                 
                //JSON name으로 추출
                System.out.println("bookInfo: name==>"+bookObject.get("b_no"));
                System.out.println("bookInfo: writer==>"+bookObject.get("b_stt"));
                System.out.println("bookInfo: price==>"+bookObject.get("b_stt_cd"));
                System.out.println("bookInfo: genre==>"+bookObject.get("tax_type"));
                System.out.println("bookInfo: publisher==>"+bookObject.get("tax_type_cd"));
 
            }
 
            /*
            JSONArray personInfoArray = (JSONArray) jsonObject.get("persons");
 
            System.out.println("\r\n* PERSONS *");
 
            for(int i=0; i<personInfoArray.size(); i++){
 
                System.out.println("=PERSON_"+i+" ===========================================");
                JSONObject personObject = (JSONObject) personInfoArray.get(i);
                System.out.println("personInfo: name==>"+personObject.get("name"));
                System.out.println("personInfo: age==>"+personObject.get("age"));
                System.out.println("personInfo: gender==>"+personObject.get("gender"));
                System.out.println("personInfo: nickname==>"+personObject.get("nickname"));
 
            }
            */
 
        }catch(Exception ex) {
        //} catch (ParseException e) {
            // TODO Auto-generated catch block
            ex.printStackTrace();
        }
        
	}	
}