G2FeedBackHandel.java 2.8 KB
package com.sy.handle;

import com.sy.model.DxpMsg;
import com.sy.model.GatherInfo;
import com.sy.model.X82Feedback;
import com.sy.service.X82Service;
import com.sy.service.router.MessageRouterG2;
import com.sy.utils.Base64Tool;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class G2FeedBackHandel extends Thread {

    private String feedBack;

    private X82Service x82Service;

    private MessageRouterG2 messageRouterG2;

    public X82Service getX82Service() {
        return x82Service;
    }

    public void setX82Service(X82Service x82Service) {
        this.x82Service = x82Service;
    }

    public MessageRouterG2 getMessageRouterG2() {
        return messageRouterG2;
    }

    public void setMessageRouterG2(MessageRouterG2 messageRouterG2) {
        this.messageRouterG2 = messageRouterG2;
    }

    public String getFeedBack() {
        return feedBack;
    }

    public void setFeedBack(String feedBack) {
        this.feedBack = feedBack;
    }

    @Override
    public void run() {
        try {
            DxpMsg dxpMsg = x82Service.analysis(feedBack);
            String data = dxpMsg.getData();
            //解密BASE64 得到X82报文
            String x82Str = Base64Tool.decodeUtf8ToUtf8(data);
            //解析报文
            X82Feedback x82Feedback = x82Service.x82Analysis(x82Str);
            String seqno = x82Feedback.getSessionId();
            GatherInfo gatherInfo = x82Service.readCacheWithSeqno(seqno);

            //todo: X82Feedback 与 X21 实体类转换
            if (StringUtils.isNotEmpty(x82Feedback.getChannelNo())){
                if (gatherInfo!=null){
                    //得到sessionid ,申报出去的X81sessionId=seqno ,一去一回sessionId一样
                    if (x82Service.X82ReleaseCheck(x82Feedback)){
                        //放行及核销
                        messageRouterG2.route(gatherInfo,x82Feedback.getOpHint());
                    }else{
                        log.info("[G2-CHECK-FAILD]-金二验放失败,不予放行");
                        messageRouterG2.faild(gatherInfo,x82Feedback.getOpHint());
                    }
                }else {
                    //没从缓存中取到过卡采集报文,就直接转,然后记录,同时给LED指示内容
                    GatherInfo gatherInfo1 = x82Service.X82FeedBackToX21GatherInfo(x82Feedback);
                    messageRouterG2.faild(gatherInfo1,x82Feedback.getOpHint());
                }
            }else {
                log.error("[G2-FEEDBACK-XML-ERR]-金二验放未知错误,源报文:{},解密报文:{}",feedBack,x82Str);
            }
        }catch (Exception e){
            log.error("金二回执处理线程出错",e);
        }
    }
}