package com.trs.web2frame.tool.tyjyh.wcmhy01_lcj.gk;

import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.trs.cms.CMSConstants;
import com.trs.web2frame.WCMServiceCaller;
import com.trs.web2frame.dispatch.Dispatch;
import com.trs.web2frame.tool.tyjyh.wcmhy01_lcj.WCMUtilInterface01;
import com.trs.web2frame.util.Annex;
import com.trs.web2frame.util.Interface;
import com.trs.web2frame.util.Log_Exception;
import com.trs.web2frame.util.Annex.HandleResult;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import net.sf.json.JSONObject;

public class StartGK {

public static ServiceImpl si=new ServiceImpl();
    public static void main(String[] args) {
        StartGK wcm=new StartGK();
        wcm.StartMethord();
    }

    public void StartMethord() {
        ServiceImpl wcmSTest=new ServiceImpl();
        StartGK wcm=new StartGK();
        try {
            String channelId;// wcm中的channelId
    		String channelIdFor;// 海云中的channelId
/*    		List<Map<String, Object>> listmap = new ArrayList<>();
    		listmap = wcmSTest.queryChanelRelation();
    		System.out.println("需导栏目数量：" + listmap.size());*/
//    		List<Map<String, Object>> listmap = new ArrayList<>();
//    		Map<String, Object> map2 = new HashMap();
//    		map2.put("oldchanelid", 1359);
//    		map2.put("newchanelid", 2);
//    		listmap.add(map2);
//    		for (Map<String, Object> map : listmap) {
//    			if(map.get("oldchanelid")!=null&&map.get("newchanelid")!=null){
//    				channelId = map.get("oldchanelid").toString();
//                    channelIdFor = map.get("newchanelid").toString();
//                    wcm.DataExchangeByChannel(channelId, channelIdFor);//迁移数据cm.quetoDocInChannel(channelId);//处理引用关系
//    			}
//    			
//    		}
    		wcm.DataExchangeByChannel("1323", "969");//迁移数据cm.quetoDocInChannel(channelId);//处理引用关系
    		wcm.DataExchangeByChannel("1325", "971");
        } catch (Exception e) {
            Log_Exception.Error_txt("StartMethord（）方法异常！"+e.getMessage());
        }
	}

    /**
     * 根据新旧栏目对应关系迁移数据
     * @param wcmChannelId
     * @param hyChannelId
     */
    public void DataExchangeByChannel(String wcmChannelId,String hyChannelId){
        Log_Exception.Logger_txt("-------Start-------将原栏目id：" + wcmChannelId + "中得数据导入海云平台" + hyChannelId + "---------Start--------");
        String sServiceId = "gov_webdocument";
        String sMethodName = "saveDocumentInOpenData";//自定义视图
        ServiceImpl wcm=new ServiceImpl();
        WCMUtilInterface01 wcmUtil=new WCMUtilInterface01();
        try {
            List<Map<String,Object>> oldMaps=wcm.GetAllDocInfoFromOldDB(wcmChannelId);//// ?2、为什么要加condition条件
            System.out.println(oldMaps.size());
            if(oldMaps!=null){
                int count=0;
                for (Map<String,Object> map : oldMaps) {
                    Map<String,Object> oPostData=new HashMap<>();
                    oPostData.put("ObjectId", 0);
                    oPostData.put("ChannelId", Integer.parseInt(hyChannelId));// 目标栏目id
                    oPostData.put("CurrUserName", "dev");
                    String wcmRecId=map.get("RECID").toString();//文档记录Id
                    String wcmDocId=map.get("DOCID").toString();//文档ID
                    String Model=map.get("MODAL").toString();//引用类型 1：本身/复制  2：链接  3：镜像
                    String docTitle=map.get("DOCTITLE").toString();
                    oPostData.put("DOCTYPE",CMSConstants.CONTENT_BODY_HTML);
                    
                    //idxID-必填
                    if (map.get("IDXID") != null) {
                        oPostData.put("IDXID", map.get("IDXID"));
                    }
                    //标题-必填
                    if (map.get("TITLE") != null) {
                        oPostData.put("TITLE", map.get("TITLE"));
                    }
                    
					if (map.get("CONTENT") != null) {
						String htmlContent = map.get("CONTENT").toString();
//						htmlContent = "中国人<a  href=\"W020190805330389250857.jpg\">新建 Microsoft Excel 工作表.xlsx</a>";
						// 处理内容中附件
						String ret_htmlContent = wcmUtil.GetRetHtmlContentIgnore(htmlContent);
						if (ret_htmlContent != null && !ret_htmlContent.equals("")) {
							htmlContent = ret_htmlContent;
						}
						oPostData.put("description", htmlContent);
					} else {
						oPostData.put("description", "");
					}
                    

                    
                    //文号
                    if (map.get("FILENUM") != null) {
                        oPostData.put("docno", map.get("FILENUM"));
                    }else {
                    	oPostData.put("docno", "");
                    }
                    
                    //主题分类-必填
                    if (map.get("SUBCAT") != null) {
                    	String SUBCAT = fenleifa(map.get("SUBCAT").toString());
                    	oPostData.put("SUBCAT", SUBCAT);
                    }
                    
                    //所属体裁-必填
                    if (map.get("THEMECAT") != null) {
                    	String THEMECAT = fenleifa(map.get("THEMECAT").toString());
                    	oPostData.put("THEMECAT", THEMECAT);
                    }
                    
                    //成文日期-必填
                    if (map.get("MDUPDTIME") != null) {
                    	 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                    	 Date date = sdf.parse(map.get("MDUPDTIME").toString());
                    	 String pubdate = sdf.format(date);
                        oPostData.put("scrq", pubdate);
                    }
                    
                    //发布日期-必填
                    if (map.get("PUBDATE") != null) {
                    	 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                    	 Date date = sdf.parse(map.get("PUBDATE").toString());
                    	 String pubdate = sdf.format(date);
                        oPostData.put("fbrq", pubdate);
                    }
                    
                    //关键词
                    if (map.get("KEYWORDS") != null) {
                        String keyword = (String) map.get("KEYWORDS");
                        keyword = keyword.replaceAll("<br/>", "");//
                        keyword = keyword.replaceAll("<br>", "");//
                        oPostData.put("keywords", keyword);
                    }
                    
                    //发布机构
                    if (map.get("PUBLISHER") != null) {
                        String PUBLISHER = (String) map.get("PUBLISHER");
                        oPostData.put("Publisher", PUBLISHER);
                    }
                    // 获取文档相关的附件信息
                    Map<String,Object> fileMap=wcmUtil.GetRelFileInfoByDocId(wcmDocId);
                    if(fileMap!=null){
                        //自定义视图
                        if(fileMap.get("docRelFile")!=null&&!"[]".equals(fileMap.get("docRelFile").toString())){
                            oPostData.put("wjyl", fileMap.get("docRelFile"));
                        }
                    }

                    //调迁移接口
                    System.out.println(count+"标题:"+wcmRecId+docTitle);
                    Dispatch result = WCMServiceCaller.Call(sServiceId, sMethodName, oPostData, true);
                    count++;
                    
                    if(result!=null){
                        JSONObject rObject = JSONObject.fromObject(result.getResponseText().toString());
                        if (rObject.get("ISSUCCESS").toString().equals("true")){
                            System.out.println("迁移第"+count+"条，成功！");
                            JSONObject dataObject=JSONObject.fromObject(rObject.getString("DATA"));
                            String hyRecId=dataObject.getString("RECID");
                            //wcmUtil.changeOrder("56129", hyRecId, "2896145");
                            Map<String,Object> resultMap=new HashMap<>();
                            resultMap=wcm.GetResultInfo(Integer.valueOf(wcmRecId));//？7、新建这个表的作用？
                            System.out.println(hyRecId);
                            //存在更新，不存在插入
                            if(resultMap!=null&&resultMap.size()>0){
                                String hyrecid=resultMap.get("hyrecid").toString();
                                String zwrecid=resultMap.get("zwrecid").toString();
                                Boolean isSuc=false;
                                if(Model.equals("1")){
                                    isSuc=wcm.UpdateResult(Integer.valueOf(wcmRecId), Integer.valueOf(hyRecId), Integer.valueOf(zwrecid));//如果是本身，替换海云字段
                                }else{
                                    isSuc=wcm.UpdateResult(Integer.valueOf(wcmRecId), Integer.valueOf(hyrecid), Integer.valueOf(hyRecId));//如果不是本身，替换占位字段
                                }
                                if(!isSuc){
                                    Log_Exception.Logger_txt("结果表 "+wcmRecId+" :更新失败！");
                                }
                            }else{
                                Boolean isSuc=false;
                                if(Model.equals("1")){
                                    isSuc=wcm.InsertResult(Integer.valueOf(wcmRecId), Integer.valueOf(hyRecId), 0,map.get("DOCTITLE").toString(),map.get("PUBDATE").toString(),map.get("CRTIME").toString());//如果是本身，只插入海云字段
                                }else{
                                    isSuc=wcm.InsertResult(Integer.valueOf(wcmRecId), 0, Integer.valueOf(hyRecId),map.get("DOCTITLE").toString(),map.get("PUBDATE").toString(),map.get("CRTIME").toString());//如果不是本身，替换占位字段
                                }
                                
                                if(!isSuc){
                                    Log_Exception.Logger_txt("结果表 "+wcmRecId+" :插入失败！");
                                }
                            }
                        }else{
                            System.out.println("迁移第"+count+"条，失败！");
                            String messageInfo=rObject.getString("MSG");
                            Log_Exception.Logger_txt("失败！RecID："+wcmRecId+" 标题："+docTitle+"错误信息："+messageInfo);

                            //记录文档失败信息
                            Boolean isSuc=false;
                            Map<String,Object> Messagemap=wcm.GetLogMessageInfo(Integer.valueOf(wcmRecId));
                            if(Messagemap!=null&&Messagemap.size()>0){
                                isSuc=wcm.UpdateLogMessageInfo(Integer.valueOf(wcmRecId), messageInfo);
                            }else{
                                isSuc=wcm.InsertLogMessageInfo(Integer.valueOf(wcmRecId), docTitle, messageInfo);
                            }
                            if(!isSuc){
                                Log_Exception.Logger_txt("错误信息表 "+wcmRecId+" :插入/更新失败！");
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            //TODO: handle exception
            Log_Exception.Error_txt("DataExchangeByChannel方法异常！"+e.getMessage());
        } finally {
        	try {
				wcm.UpdateResults(Integer.valueOf(hyChannelId));
			} catch (NumberFormatException e) {
				e.printStackTrace();
			} catch (SQLException e) {
				e.printStackTrace();
			}//如果不是本身，替换占位字段
        }
    }




    
    public String fenleifa(String oldClassinfoid) {
    	String newClassinfoid = "";
    	if("".equals(oldClassinfoid)) {
    		newClassinfoid = "";
    	}else if("82".equals(oldClassinfoid)) {newClassinfoid="35";}
    	else if("91".equals(oldClassinfoid)) {newClassinfoid="44";}
    	else if("99".equals(oldClassinfoid)) {newClassinfoid="52";}
    	else if("109".equals(oldClassinfoid)) {newClassinfoid="62";}
    	else if("119".equals(oldClassinfoid)) {newClassinfoid="72";}
    	else if("124".equals(oldClassinfoid)) {newClassinfoid="77";}
    	else if("137".equals(oldClassinfoid)) {newClassinfoid="90";}
    	else if("145".equals(oldClassinfoid)) {newClassinfoid="98";}
    	else if("152".equals(oldClassinfoid)) {newClassinfoid="105";}
    	else if("159".equals(oldClassinfoid)) {newClassinfoid="112";}
    	else if("164".equals(oldClassinfoid)) {newClassinfoid="117";}
    	else if("170".equals(oldClassinfoid)) {newClassinfoid="123";}
    	else if("175".equals(oldClassinfoid)) {newClassinfoid="128";}
    	else if("179".equals(oldClassinfoid)) {newClassinfoid="132";}
    	else if("187".equals(oldClassinfoid)) {newClassinfoid="140";}
    	else if("192".equals(oldClassinfoid)) {newClassinfoid="145";}
    	else if("200".equals(oldClassinfoid)) {newClassinfoid="153";}
    	else if("203".equals(oldClassinfoid)) {newClassinfoid="156";}
    	else if("208".equals(oldClassinfoid)) {newClassinfoid="161";}
    	else if("212".equals(oldClassinfoid)) {newClassinfoid="165";}
    	else if("215".equals(oldClassinfoid)) {newClassinfoid="168";}
    	else if("83".equals(oldClassinfoid)) {newClassinfoid="36";}
    	else if("84".equals(oldClassinfoid)) {newClassinfoid="37";}
    	else if("85".equals(oldClassinfoid)) {newClassinfoid="38";}
    	else if("86".equals(oldClassinfoid)) {newClassinfoid="39";}
    	else if("87".equals(oldClassinfoid)) {newClassinfoid="40";}
    	else if("88".equals(oldClassinfoid)) {newClassinfoid="41";}
    	else if("89".equals(oldClassinfoid)) {newClassinfoid="42";}
    	else if("90".equals(oldClassinfoid)) {newClassinfoid="43";}
    	else if("92".equals(oldClassinfoid)) {newClassinfoid="45";}
    	else if("93".equals(oldClassinfoid)) {newClassinfoid="46";}
    	else if("94".equals(oldClassinfoid)) {newClassinfoid="47";}
    	else if("95".equals(oldClassinfoid)) {newClassinfoid="48";}
    	else if("96".equals(oldClassinfoid)) {newClassinfoid="49";}
    	else if("97".equals(oldClassinfoid)) {newClassinfoid="50";}
    	else if("98".equals(oldClassinfoid)) {newClassinfoid="51";}
    	else if("100".equals(oldClassinfoid)) {newClassinfoid="53";}
    	else if("101".equals(oldClassinfoid)) {newClassinfoid="54";}
    	else if("102".equals(oldClassinfoid)) {newClassinfoid="55";}
    	else if("103".equals(oldClassinfoid)) {newClassinfoid="56";}
    	else if("104".equals(oldClassinfoid)) {newClassinfoid="57";}
    	else if("105".equals(oldClassinfoid)) {newClassinfoid="58";}
    	else if("106".equals(oldClassinfoid)) {newClassinfoid="59";}
    	else if("107".equals(oldClassinfoid)) {newClassinfoid="60";}
    	else if("108".equals(oldClassinfoid)) {newClassinfoid="61";}
    	else if("110".equals(oldClassinfoid)) {newClassinfoid="63";}
    	else if("111".equals(oldClassinfoid)) {newClassinfoid="64";}
    	else if("112".equals(oldClassinfoid)) {newClassinfoid="65";}
    	else if("113".equals(oldClassinfoid)) {newClassinfoid="66";}
    	else if("114".equals(oldClassinfoid)) {newClassinfoid="67";}
    	else if("115".equals(oldClassinfoid)) {newClassinfoid="68";}
    	else if("116".equals(oldClassinfoid)) {newClassinfoid="69";}
    	else if("117".equals(oldClassinfoid)) {newClassinfoid="70";}
    	else if("118".equals(oldClassinfoid)) {newClassinfoid="71";}
    	else if("120".equals(oldClassinfoid)) {newClassinfoid="73";}
    	else if("121".equals(oldClassinfoid)) {newClassinfoid="74";}
    	else if("122".equals(oldClassinfoid)) {newClassinfoid="75";}
    	else if("123".equals(oldClassinfoid)) {newClassinfoid="76";}
    	else if("125".equals(oldClassinfoid)) {newClassinfoid="78";}
    	else if("126".equals(oldClassinfoid)) {newClassinfoid="79";}
    	else if("127".equals(oldClassinfoid)) {newClassinfoid="80";}
    	else if("128".equals(oldClassinfoid)) {newClassinfoid="81";}
    	else if("129".equals(oldClassinfoid)) {newClassinfoid="82";}
    	else if("130".equals(oldClassinfoid)) {newClassinfoid="83";}
    	else if("131".equals(oldClassinfoid)) {newClassinfoid="84";}
    	else if("132".equals(oldClassinfoid)) {newClassinfoid="85";}
    	else if("133".equals(oldClassinfoid)) {newClassinfoid="86";}
    	else if("134".equals(oldClassinfoid)) {newClassinfoid="87";}
    	else if("135".equals(oldClassinfoid)) {newClassinfoid="88";}
    	else if("136".equals(oldClassinfoid)) {newClassinfoid="89";}
    	else if("138".equals(oldClassinfoid)) {newClassinfoid="91";}
    	else if("139".equals(oldClassinfoid)) {newClassinfoid="92";}
    	else if("140".equals(oldClassinfoid)) {newClassinfoid="93";}
    	else if("141".equals(oldClassinfoid)) {newClassinfoid="94";}
    	else if("142".equals(oldClassinfoid)) {newClassinfoid="95";}
    	else if("143".equals(oldClassinfoid)) {newClassinfoid="96";}
    	else if("144".equals(oldClassinfoid)) {newClassinfoid="97";}
    	else if("146".equals(oldClassinfoid)) {newClassinfoid="99";}
    	else if("147".equals(oldClassinfoid)) {newClassinfoid="100";}
    	else if("148".equals(oldClassinfoid)) {newClassinfoid="101";}
    	else if("149".equals(oldClassinfoid)) {newClassinfoid="102";}
    	else if("150".equals(oldClassinfoid)) {newClassinfoid="103";}
    	else if("151".equals(oldClassinfoid)) {newClassinfoid="104";}
    	else if("153".equals(oldClassinfoid)) {newClassinfoid="106";}
    	else if("154".equals(oldClassinfoid)) {newClassinfoid="107";}
    	else if("155".equals(oldClassinfoid)) {newClassinfoid="108";}
    	else if("156".equals(oldClassinfoid)) {newClassinfoid="109";}
    	else if("157".equals(oldClassinfoid)) {newClassinfoid="110";}
    	else if("158".equals(oldClassinfoid)) {newClassinfoid="111";}
    	else if("160".equals(oldClassinfoid)) {newClassinfoid="113";}
    	else if("161".equals(oldClassinfoid)) {newClassinfoid="114";}
    	else if("162".equals(oldClassinfoid)) {newClassinfoid="115";}
    	else if("163".equals(oldClassinfoid)) {newClassinfoid="116";}
    	else if("165".equals(oldClassinfoid)) {newClassinfoid="118";}
    	else if("166".equals(oldClassinfoid)) {newClassinfoid="119";}
    	else if("167".equals(oldClassinfoid)) {newClassinfoid="120";}
    	else if("168".equals(oldClassinfoid)) {newClassinfoid="121";}
    	else if("169".equals(oldClassinfoid)) {newClassinfoid="122";}
    	else if("171".equals(oldClassinfoid)) {newClassinfoid="124";}
    	else if("172".equals(oldClassinfoid)) {newClassinfoid="125";}
    	else if("173".equals(oldClassinfoid)) {newClassinfoid="126";}
    	else if("174".equals(oldClassinfoid)) {newClassinfoid="127";}
    	else if("176".equals(oldClassinfoid)) {newClassinfoid="129";}
    	else if("177".equals(oldClassinfoid)) {newClassinfoid="130";}
    	else if("178".equals(oldClassinfoid)) {newClassinfoid="131";}
    	else if("180".equals(oldClassinfoid)) {newClassinfoid="133";}
    	else if("181".equals(oldClassinfoid)) {newClassinfoid="134";}
    	else if("182".equals(oldClassinfoid)) {newClassinfoid="135";}
    	else if("183".equals(oldClassinfoid)) {newClassinfoid="136";}
    	else if("184".equals(oldClassinfoid)) {newClassinfoid="137";}
    	else if("185".equals(oldClassinfoid)) {newClassinfoid="138";}
    	else if("186".equals(oldClassinfoid)) {newClassinfoid="139";}
    	else if("188".equals(oldClassinfoid)) {newClassinfoid="141";}
    	else if("189".equals(oldClassinfoid)) {newClassinfoid="142";}
    	else if("190".equals(oldClassinfoid)) {newClassinfoid="143";}
    	else if("191".equals(oldClassinfoid)) {newClassinfoid="144";}
    	else if("193".equals(oldClassinfoid)) {newClassinfoid="146";}
    	else if("194".equals(oldClassinfoid)) {newClassinfoid="147";}
    	else if("195".equals(oldClassinfoid)) {newClassinfoid="148";}
    	else if("196".equals(oldClassinfoid)) {newClassinfoid="149";}
    	else if("197".equals(oldClassinfoid)) {newClassinfoid="150";}
    	else if("198".equals(oldClassinfoid)) {newClassinfoid="151";}
    	else if("199".equals(oldClassinfoid)) {newClassinfoid="152";}
    	else if("201".equals(oldClassinfoid)) {newClassinfoid="154";}
    	else if("202".equals(oldClassinfoid)) {newClassinfoid="155";}
    	else if("204".equals(oldClassinfoid)) {newClassinfoid="157";}
    	else if("205".equals(oldClassinfoid)) {newClassinfoid="158";}
    	else if("206".equals(oldClassinfoid)) {newClassinfoid="159";}
    	else if("207".equals(oldClassinfoid)) {newClassinfoid="160";}
    	else if("209".equals(oldClassinfoid)) {newClassinfoid="162";}
    	else if("210".equals(oldClassinfoid)) {newClassinfoid="163";}
    	else if("211".equals(oldClassinfoid)) {newClassinfoid="164";}
    	else if("213".equals(oldClassinfoid)) {newClassinfoid="166";}
    	else if("214".equals(oldClassinfoid)) {newClassinfoid="167";}
    	else if("217".equals(oldClassinfoid)) {newClassinfoid="2";}
    	else if("223".equals(oldClassinfoid)) {newClassinfoid="8";}
    	else if("228".equals(oldClassinfoid)) {newClassinfoid="13";}
    	else if("233".equals(oldClassinfoid)) {newClassinfoid="18";}
    	else if("240".equals(oldClassinfoid)) {newClassinfoid="25";}
    	else if("218".equals(oldClassinfoid)) {newClassinfoid="3";}
    	else if("219".equals(oldClassinfoid)) {newClassinfoid="4";}
    	else if("220".equals(oldClassinfoid)) {newClassinfoid="5";}
    	else if("221".equals(oldClassinfoid)) {newClassinfoid="6";}
    	else if("222".equals(oldClassinfoid)) {newClassinfoid="7";}
    	else if("224".equals(oldClassinfoid)) {newClassinfoid="9";}
    	else if("225".equals(oldClassinfoid)) {newClassinfoid="10";}
    	else if("226".equals(oldClassinfoid)) {newClassinfoid="11";}
    	else if("227".equals(oldClassinfoid)) {newClassinfoid="12";}
    	else if("229".equals(oldClassinfoid)) {newClassinfoid="14";}
    	else if("230".equals(oldClassinfoid)) {newClassinfoid="15";}
    	else if("231".equals(oldClassinfoid)) {newClassinfoid="16";}
    	else if("232".equals(oldClassinfoid)) {newClassinfoid="17";}
    	else if("234".equals(oldClassinfoid)) {newClassinfoid="19";}
    	else if("235".equals(oldClassinfoid)) {newClassinfoid="20";}
    	else if("236".equals(oldClassinfoid)) {newClassinfoid="21";}
    	else if("237".equals(oldClassinfoid)) {newClassinfoid="22";}
    	else if("238".equals(oldClassinfoid)) {newClassinfoid="23";}
    	else if("239".equals(oldClassinfoid)) {newClassinfoid="24";}
    	else if("241".equals(oldClassinfoid)) {newClassinfoid="26";}
    	else if("242".equals(oldClassinfoid)) {newClassinfoid="27";}
    	else if("243".equals(oldClassinfoid)) {newClassinfoid="28";}
    	else if("244".equals(oldClassinfoid)) {newClassinfoid="29";}
    	else if("245".equals(oldClassinfoid)) {newClassinfoid="30";}
    	else if("246".equals(oldClassinfoid)) {newClassinfoid="31";}
    	else if("247".equals(oldClassinfoid)) {newClassinfoid="32";}
    	else if("248".equals(oldClassinfoid)) {newClassinfoid="33";}
		return newClassinfoid;
    }
    
}
