IMFSaveHandle.java 3.3 KB
package com.tianbo.imfClient.handle;

import com.tianbo.imfClient.model.T_ETL_MESSAGE;
import com.tianbo.imfClient.service.T_ETL_MESSAGEService;
import com.tianbo.util.Date.DateUtil;
import com.tianbo.util.IO.FileTool;
import com.tianbo.util.XML.XML2ENTITY;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.Date;
import java.util.Map;

/**
 * 存储IMF过来的原始报文到数据仓库T_ELT_MESSAGE原始报文表中
 */
@Component
public class IMFSaveHandle {

    @Autowired
    protected T_ETL_MESSAGEService messageService;

    private static IMFSaveHandle saveHandle;

    protected static final Logger logger = Logger.getLogger(IMFSaveHandle.class);

    @PostConstruct
    public  void  init(){
        saveHandle = this;
        saveHandle.messageService = this.messageService;
    }

    public void handle(String xmlmessage){
        try {
            //有人发报文头部不按规范发
//            xmlmessage = xmlmessage.replace("<Msg>","<MSG>")
//                    .replace("<msg>","<MSG>")
//                    .replace("</Msg>","</MSG>")
//                    .replace("</msg>","</MSG>");


            Document document = DocumentHelper.parseText(xmlmessage);
            XML2ENTITY xml2ENTITY =new  XML2ENTITY();
            Map xmlMap = xml2ENTITY.Dom2Map(document);

            Map meta = (Map) xmlMap.get("META");

            T_ETL_MESSAGE message = new T_ETL_MESSAGE();

            String sndrm = meta.get("SNDR").toString();
            String stypm = meta.get("STYP").toString();



            if ("TXD".equals(sndrm)){
                //读取配置文件的需要本地存储报文的节点
                String saveStyp= FileTool.readProperties("saveStyp");
                String[]  styps = saveStyp.split(",");
                for (String item: styps) {
                    if (item.equals(stypm)){
                        //存储至备份目录
                        FileTool.writeFileToBak(xmlmessage);
                    }
                }
            }

            String typem = meta.get("TYPE").toString();
            String rcvr =  XML2ENTITY.getMap(meta,"RCVR").toString();
            String ddtm =  meta.get("DDTM").toString();
            String seqn =  meta.get("SEQN").toString();




            message.setSndr(sndrm);
            message.setRcvr(rcvr);
            message.setType(typem);
            message.setStyp(stypm);
            message.setSeqn(seqn);


            Date ddtmDate = DateUtil.formatByyyyyMMddHHmmss(ddtm);
            message.setDdtm(ddtmDate);
            message.setSntm(ddtmDate);
            message.setOper("ALL");
            message.setAppid("W");
            message.setEtltim(new Date());



            message.setContent(xmlmessage);

            int i = saveHandle.messageService.insertSelective(message);
        }catch (Exception e){
            FileTool.writeFile("err",e.toString()+"\n"+xmlmessage,false);
            FileTool.writeFile("errxml",xmlmessage,false);
            logger.warn("*报文入库失败已存储成备份文件*");
            logger.error(e);
            logger.warn(e);
        }



    }
}