パッケージorg.rx.service.command.impl。 輸入lombok.Getter。 輸入lombok.Setter。 輸入org.rx.core.NQuery。 輸入org.rx.core.dto.media.MediaType。 輸入org.rx.core.dto.media.AdvFoundStatus。 輸入org.rx.core.dto.media.FindAdvResult; 輸入org.rx.service.command.Command; 輸入org.rx.service.command.HandleResult; 輸入org.springframework.context.annotation.Scope。 輸入org.springframework.core.annotation.Order。 輸入org.springframework.stereotype.Component。 輸入javax.annotation.Resource。 インポート 静的org.rx.core.Contract.require; @Order( 22 ) @Component @Scope( "プロトタイプ" ) パブリック クラス BuyCmdが実装コマンド{ プライベート 静的 最終列キー= "买を" ; @Resource プライベートFindAdvCmd findAdvCmdを。 @Getter @Setter プライベート int型のステップ= 1 ; プライベート int型 ERRORCOUNT = 0 ; @Override パブリック ブールPEEK(文字列メッセージ){ (メッセージ)を必要とします。 メッセージ =message.trim()。 ストリングgoodsName = tryGetGoodsName(メッセージ)。 もし(!goodsName = NULL ){ ステップ = 2 。 返す 真; } 戻り NQuery.of( "买" ).contains(メッセージ)。 } @Override 公共 HandleResult <ストリング> のhandleMessage(文字列はuserId、文字メッセージ){ (userIdを、メッセージ)を必要とします。 スイッチ(ステップ){ ケース 1 : ステップ = 2 。 リターン HandleResult.ok(+「1111は、私が商品にN- \ 1111買う」 +「N- \プロを、次の形式に返信してください」 +「N- \ ********を買う」 「\ N-を「+ 」のような:アップルの携帯電話購入「これを); ケース 2 : 文字列goodsName = tryGetGoodsName(メッセージ); IF(goodsName == nullの){ 返す(HandleResult.okを」\ 1111は、私が品物1111を買いますN - 「+ 」プロの回答形式エラーが、次の形式に返信してください:N \ - 「+ 」のn \ ********を買います- 「+ 」\ n」は+ "如:买苹果手机"、++ ERRORCOUNT> 2?ナル:この); } ため(のMediaType MEDIATYPE:新規のMediaType [] {MediaType.Taobao、MediaType.Jd}){ FindAdvResult recommendAdv = findAdvCmd.getRecommendAdv(MEDIATYPE、goodsName、USERID)。 場合(!recommendAdv = NULL && recommendAdv.getFoundStatus()== AdvFoundStatus.Ok){ 返す(は、ユーザーID、recommendAdv findAdvCmd.handleResultをヌル)。 } } を返す)(findAdvCmd.noAdvします。 } を返す)(HandleResult.failします。 } プライベート文字tryGetGoodsName(文字メッセージ){ 場合(!message.startsWith(キー)){ 戻り ヌル。 } 戻り message.substring(1 ).trim(); } }