狀態(tài)機(jī)匹配(三)(從零實(shí)現(xiàn))

之前一直配合源碼,來(lái)講,可能有點(diǎn)生硬,所以花了會(huì)功夫構(gòu)思了支付相關(guān)的應(yīng)用場(chǎng)景,寫了一個(gè)簡(jiǎn)化版的mapFunc的匹配案例,歡迎提建議

/*
支付相關(guān)的狀態(tài)機(jī)
 */
@Component
@Slf4j
@Builder
public class PayFuncMap implements IMapFunction {

    /*
    狀態(tài)入口:交易請(qǐng)求進(jìn)入
     */
    @MapFunctionListener(name = "交易請(qǐng)求檢查",group = "deal",code = "requestEnter")
    public StateNode dealRequestEnter(StateNode<HttpServletRequest, ResultDTO> currentNode){
        log.info("交易請(qǐng)求進(jìn)入");
        /*
        注意此處聲明是servlet的請(qǐng)求體,最原始請(qǐng)求數(shù)據(jù),便于統(tǒng)一處理
         */
        log.info(currentNode.getRequestDto().toString());
        /*
        跟據(jù)當(dāng)前節(jié)點(diǎn)的請(qǐng)求入?yún)?shù)去匹配子狀態(tài)機(jī)
         */
        /*
        這里加入一個(gè)子檢查狀態(tài)機(jī),簽名校驗(yàn),ip檢查,身份驗(yàn)證,交易能力,匹配請(qǐng)求成功或失敗
         */

        /*
        拿到子檢查狀態(tài)機(jī)的結(jié)果回歸主線狀態(tài)機(jī)匹配
         */
        boolean 校驗(yàn)成功 = true;
        if(校驗(yàn)成功){
            return StateNode.builder().nodeCode("business_match").build();
        }
        //否則進(jìn)入交易異常
        return StateNode.builder().nodeCode("deal_exception").build();
    }

    /*
    用于匹配交易的實(shí)體
     */
    static class BusinessInfo{}

    @MapFunctionListener(name = "匹配具體交易",group = "business",code = "match")
    public StateNode businessMatch(StateNode<BusinessInfo,ResultDTO> currentNode){
        log.info("business_match");

        log.info(currentNode.getRequestDto().toString());

        /*
        根據(jù)請(qǐng)求體去匹配 具體的第三方的支付或退款或賬單其他操作,等等
        可以依據(jù)實(shí)際情況選擇是否分離子狀態(tài)機(jī)
         */
        return StateNode.builder().response(ResultDTO.builder().message("測(cè)試終點(diǎn)狀態(tài)").build()).build();
    }
    @MapFunctionListener(name = "支付寶支付",group = "alipay",code = "o2oPay")
    public StateNode alipayO2oPay(StateNode currentNode){
        log.info("alipayO2oPay");
        // 支付寶支付 子狀態(tài)機(jī)
        /*
        1.證書(shū)
        2.特有參數(shù)組裝
        3.發(fā)起支付請(qǐng)求
        4.判斷請(qǐng)求成功與否
        5.加入訂單(等待第三方的支付結(jié)果回調(diào),此處也許一個(gè)處理)
         */
        return StateNode.builder().response(ResultDTO.builder().message("deal_end").build()).build();
    }

    @MapFunctionListener(name = "支付寶退款",group = "alipay",code = "o2orenfund")
    public StateNode alipayO2oRefund(StateNode currentNode){
        log.info("alipayO2oRefund");
        log.info("alipayO2oPay");
        // 支付寶支付 子狀態(tài)機(jī)
        /*
        1.證書(shū)
        2.特有參數(shù)組裝
        3.發(fā)起退款請(qǐng)求
        4.判斷請(qǐng)求成功與否
        5.加入訂單(等待第三方的支付結(jié)果回調(diào),此處也許一個(gè)處理)
        6.如果第三方不支持回調(diào),此處需要加入一個(gè)異步輪詢?nèi)蝿?wù)池
         */
        return StateNode.builder().response(ResultDTO.builder().message("deal_end").build()).build();
    }


    @MapFunctionListener(name = "交易結(jié)束",group = "deal",code = "end")
    public StateNode dealEnd(StateNode currentNode){
        log.info("test02");
        return StateNode.builder().response(ResultDTO.builder().message("測(cè)試終點(diǎn)狀態(tài)").build()).build();
    }

    @MapFunctionListener(name = "交易異常",group = "deal",code = "exception")
    public StateNode dealException(StateNode currentNode){
        log.info("test03");
        //測(cè)試異常
        int ss = 1/0;
        return StateNode.builder().nodeCode("t_test02").build();
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評(píng)論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,694評(píng)論 4 61
  • 文/綠駿馬 星期天,一家人總會(huì)回去看看父母。午飯時(shí),岳父對(duì)妞妞說(shuō):“還記不記得樓后那個(gè)帶外孫女的老爺爺?他開(kāi)了個(gè)人...
    綠駿馬sja閱讀 361評(píng)論 0 2
  • 很多時(shí)候我們與愛(ài)人相處時(shí),我們雖然深愛(ài)著彼此,卻總是在不經(jīng)意間傷害對(duì)方,而且不一定能夠讓彼此感到幸福,因?yàn)椴欢脤?duì)...
    翠霞_0256閱讀 538評(píng)論 1 2
  • 這幾天跟我媽聊天,我告訴她,我們學(xué)生會(huì)有一個(gè)小品是我改編,然后上臺(tái)表演了。雖然在我心里覺(jué)得這件事并沒(méi)有什么了不起的...
    阿來(lái)卡桑閱讀 183評(píng)論 2 1

友情鏈接更多精彩內(nèi)容