Spring StateMachine狀態(tài)機(jī)引擎在項(xiàng)目中的應(yīng)用(七)-集成測(cè)試

測(cè)試代碼

弄了個(gè)全集的測(cè)試代碼嚼酝,如下:

存在逾期彤避、部分還款
    /**
     *
     * 從創(chuàng)建剂癌、放款境肾、逾期到部分還款
     *
     * @return
     * @throws OspException
     */
    @Test
    public void testFromOverdueToRepaid() throws OspException {
        // a. 創(chuàng)建已簽約接口
        String bizOrderId = createSignOrder();

        // b.構(gòu)造放款請(qǐng)求
        BizOrderStatusRequest loanReq = genStatusRequestFromCondition(bizOrderId,
                BizOrderOperationTypeEnum.LOAN,
                SIGNED,
                null  // 可填LOANING永丝,也可不填锹漱,會(huì)有默認(rèn)值。但是不能填別的狀態(tài)慕嚷,狀態(tài)機(jī)會(huì)禁止隨意改變狀態(tài)
        );
        OrderBaseResponse response = bizOrderStatusService.loan(loanReq);
        System.out.println(response);
        Assert.assertNull(response.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), response.getResultCode());

        // c. 放款成功請(qǐng)求
        BizOrderStatusRequest loanSuccReq = genStatusRequestFromCondition(bizOrderId,
                BizOrderOperationTypeEnum.LOAN,  // 放款失敗哥牍,直接關(guān)單
                LOANING,
                LOANED  // 可不傳,會(huì)默認(rèn)
        );
        OrderBaseResponse loanSuccResp = bizOrderStatusService.loanSucc(loanSuccReq);
        System.out.println(loanSuccResp);
        Assert.assertNull(loanSuccResp.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), loanSuccResp.getResultCode());

        // d.生成賬單請(qǐng)求
        BizOrderStatusRequest genBillReq = genStatusRequestFromCondition(bizOrderId,
                BizOrderOperationTypeEnum.GEN_BILL,
                LOANED,
                null  // 可以不傳喝检,也可以傳BILL_BILL
        );

        OrderBaseResponse genBillResp = bizOrderStatusService.genBill(genBillReq);
        System.out.println(genBillResp);
        Assert.assertNull(genBillResp.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), genBillResp.getResultCode());

        // e. 到逾期
        BizOrderStatusRequest overdueReq = genStatusRequestFromCondition(bizOrderId,
                BizOrderOperationTypeEnum.OVERDUE,
                BILL_GEN,
                OVERDUE
        );
        OrderBaseResponse overdueResp = bizOrderStatusService.overdue(overdueReq);
        System.out.println(overdueResp);
        Assert.assertNull(overdueResp.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), overdueResp.getResultCode());

        // f. 從逾期到部分還款
        BizOrderStatusRequest partRepayReq = genStatusRequestFromCondition(bizOrderId,
                BizOrderOperationTypeEnum.REPAY,
                OVERDUE,
                REPAID  // 置為還款中砂心,必傳
        );
        partRepayReq.getBizOrderStatusModel().setEffectAmount(2.5);

        OrderBaseResponse partRepayResp = bizOrderStatusService.repay(partRepayReq);
        System.out.println(partRepayResp);
        Assert.assertNull(partRepayResp.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), partRepayResp.getResultCode());

        // g. 校驗(yàn)狀態(tài)是否為部分還款
        SingleOrderResponse queryResponse = bizOrderQueryService.findOrderByBizOrderId(bizOrderId);
        Assert.assertNull(queryResponse.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), queryResponse.getResultCode());
        Assert.assertEquals(BizOrderStatusEnum.REPAID.getStatus(), queryResponse.getOrderModel().getOrderStatus());

    }
從放款到全部還款,不存在逾期及部分還款
    /**
     * 從還款到最終訂單結(jié)束
     *
     * 測(cè)試順序 --- 2
     *
     * @return
     * @throws OspException
     */
    @Test
    public void testFromRepaidToSuccess() throws OspException {
        // a. 創(chuàng)建已簽約接口
        String bizOrderId = createSignOrder();

        // b.構(gòu)造放款請(qǐng)求
        BizOrderStatusRequest loanReq = genStatusRequestFromCondition(bizOrderId,
                BizOrderOperationTypeEnum.LOAN,
                SIGNED,
                null  // 可填LOANING蛇耀,也可不填辩诞,會(huì)有默認(rèn)值。但是不能填別的狀態(tài)纺涤,狀態(tài)機(jī)會(huì)禁止隨意改變狀態(tài)
        );
        OrderBaseResponse response = bizOrderStatusService.loan(loanReq);
        System.out.println(response);
        Assert.assertNull(response.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), response.getResultCode());

        // c. 放款成功請(qǐng)求
        BizOrderStatusRequest loanSuccReq = genStatusRequestFromCondition(bizOrderId,
                BizOrderOperationTypeEnum.LOAN,  // 放款失敗译暂,直接關(guān)單
                LOANING,
                LOANED  // 可不傳抠忘,會(huì)默認(rèn)
        );
        OrderBaseResponse loanSuccResp = bizOrderStatusService.loanSucc(loanSuccReq);
        System.out.println(loanSuccResp);
        Assert.assertNull(loanSuccResp.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), loanSuccResp.getResultCode());

        // d.生成賬單請(qǐng)求
        BizOrderStatusRequest genBillReq = genStatusRequestFromCondition(bizOrderId,
                BizOrderOperationTypeEnum.GEN_BILL,
                LOANED,
                null  // 可以不傳,也可以傳BILL_BILL
        );

        OrderBaseResponse genBillResp = bizOrderStatusService.genBill(genBillReq);
        System.out.println(genBillResp);
        Assert.assertNull(genBillResp.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), genBillResp.getResultCode());

        // e. 全部還款
        BizOrderStatusRequest repayReq = genStatusRequestFromCondition(bizOrderId,
                BizOrderOperationTypeEnum.REPAY,
                BILL_GEN,
                REPAID  // 置為全部還款外永,必傳
        );
        repayReq.getBizOrderStatusModel().setEffectAmount(6.5);

        OrderBaseResponse repayResp = bizOrderStatusService.repay(repayReq);
        System.out.println(repayResp);
        Assert.assertNull(repayResp.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), repayResp.getResultCode());

        // f. 從還款到銷(xiāo)賬
        BizOrderStatusRequest successReq = genStatusRequestFromCondition(bizOrderId,
                BizOrderOperationTypeEnum.SUCCESS,
                REPAID,
                SUCCESS  // 置為全部還款崎脉,必傳
        );

        OrderBaseResponse succResp = bizOrderStatusService.succ(successReq);
        System.out.println(succResp);
        Assert.assertNull(succResp.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), succResp.getResultCode());

        // g. 校驗(yàn)狀態(tài)是否為全部還款
        SingleOrderResponse queryResponse = bizOrderQueryService.findOrderByBizOrderId(bizOrderId);
        Assert.assertNull(queryResponse.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), queryResponse.getResultCode());
        Assert.assertEquals(BizOrderStatusEnum.SUCCESS.getStatus(), queryResponse.getOrderModel().getOrderStatus());

    }
構(gòu)造訂單變化請(qǐng)求,私有方法
    /**
     * 從創(chuàng)建訂單開(kāi)始構(gòu)造狀態(tài)變化請(qǐng)求
     *
     * @param initStatus
     * @param operationTypeEnum
     * @param curStatus
     * @param targetStatus
     * @return
     * @throws OspException
     */
    private BizOrderStatusRequest genStatusRequestFromCreate(BizOrderStatusEnum initStatus,
                                                             BizOrderOperationTypeEnum operationTypeEnum,
                                                             BizOrderStatusEnum curStatus,
                                                             BizOrderStatusEnum targetStatus
    ) throws OspException {

        BizOrderStatusRequest statusRequest = new BizOrderStatusRequest();

        statusRequest.setBizCode(createOrder(initStatus));
        statusRequest.setOperationType(operationTypeEnum.getOperationType());
        statusRequest.setSourceId(IDGenerater.getUniId());

        BizOrderStatusModel statusModel = new BizOrderStatusModel();
        statusModel.setBizType(BizOrderBizTypeEnum.EMPLOAN.getOrderBizType());
        statusModel.setBizOrderId(statusRequest.getBizCode());
        statusModel.setCurrentOrderStatus(curStatus.getStatus());
        if (null != targetStatus) {
            statusModel.setTargetOrderStatus(targetStatus.getStatus());
        }
        statusRequest.setBizOrderStatusModel(statusModel);
        statusRequest.setCallSystem("vip-2");

        return statusRequest;
    }

從制定狀態(tài) 構(gòu)造 狀態(tài)變化請(qǐng)求
    /**
     * 從指定條件構(gòu)造狀態(tài)變化請(qǐng)求
     *
     * @param bizOrderId
     * @param operationTypeEnum
     * @param currentStatus
     * @param targetStatus
     * @return
     */
    private BizOrderStatusRequest genStatusRequestFromCondition(String bizOrderId,
                                                                BizOrderOperationTypeEnum operationTypeEnum,
                                                                BizOrderStatusEnum currentStatus,
                                                                BizOrderStatusEnum targetStatus) {

        BizOrderStatusRequest statusRequest = new BizOrderStatusRequest();

        statusRequest.setBizCode(bizOrderId);
        statusRequest.setOperationType(operationTypeEnum.getOperationType());
        statusRequest.setSourceId(IDGenerater.getUniId());

        BizOrderStatusModel statusModel = new BizOrderStatusModel();
        statusModel.setBizType(BizOrderBizTypeEnum.EMPLOAN.getOrderBizType());
        statusModel.setBizOrderId(statusRequest.getBizCode());
        statusModel.setCurrentOrderStatus(currentStatus.getStatus());
        if (null != targetStatus) {
            statusModel.setTargetOrderStatus(targetStatus.getStatus());
        }
        statusRequest.setBizOrderStatusModel(statusModel);
        statusRequest.setCallSystem("wyd-new");

        return statusRequest;
    }

    /**
     * 創(chuàng)建訂單伯顶,并入庫(kù)
     *
     * @param targetStatus
     * @return
     * @throws OspException
     */
    private String createOrder(BizOrderStatusEnum targetStatus) throws OspException {
        init();
        BizOrderCreateRequest createRequest = new BizOrderCreateRequest();

        createRequest.setBizCode("001"); // 創(chuàng)建時(shí)指定傳輸內(nèi)容001
        createRequest.setSourceId(IDGenerater.getUniId());
        createRequest.setOperationType(BizOrderOperationTypeEnum.CREATE_ORDER.getOperationType());
        createRequest.setCallSystem("vip-pay");

        BizOrderCreateModel createModel = new BizOrderCreateModel();
        createRequest.setBizOrderCreateModel(createModel);

        createModel.setUserId(131415161788l);
        createModel.setMerchantId(8l);
        createModel.setContractId(3l);
        createModel.setProdId(20l);
//        createModel.setProdCode(); 可為空
        createModel.setBizType(BizOrderBizTypeEnum.EMPLOAN.getOrderBizType()); // 無(wú)憂(yōu)貸
        createModel.setOrderStatus(targetStatus.getStatus());
        createModel.setOrderSrc("h6");

        BizOrderExtendsCreateModel extendsModel = new BizOrderExtendsCreateModel();
        createRequest.setExtendsCreateModel(extendsModel);

        extendsModel.setUserRealname("張小強(qiáng)");

        if (log.isDebugEnabled()) {
            log.debug("debug log level");
        }

        // 創(chuàng)建訂單
        BizOrderCreateResponse response = bizOrderCreateService.create(createRequest);
        System.out.println(response);
        Assert.assertNull(response.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), response.getResultCode());

        SingleOrderResponse queryResponse = bizOrderQueryService.findOrderByBizOrderId(response.getBizOrderId());
        Assert.assertNull(queryResponse.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), queryResponse.getResultCode());
        Assert.assertEquals(targetStatus.getStatus(), queryResponse.getOrderModel().getOrderStatus());

        return response.getBizOrderId();
    }

    /**
     * 構(gòu)造已簽約完成的訂單囚灼,并返回訂單ID
     *
     * @return
     * @throws OspException
     */
    private String createSignOrder() throws OspException {
        // a. 創(chuàng)建狀態(tài)為WAIT_BORROW的訂單
        BizOrderCreateRequest createRequest = wrapCreateRequest(BizOrderStatusEnum.WAIT_BORROW);

        BizOrderCreateResponse response = bizOrderCreateService.create(createRequest);
        System.out.println(response);
        Assert.assertNull(response.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), response.getResultCode());

        SingleOrderResponse queryResponse1 = bizOrderQueryService.findOrderByBizOrderId(response.getBizOrderId());
        BizOrderModel bizOrderModel = queryResponse1.getOrderModel();


        // a.1 構(gòu)造審核成功對(duì)應(yīng)請(qǐng)求
        BizOrderStatusRequest inDealRiskAuditSuccReq = genStatusRequestFromCondition(response.getBizOrderId(),
                BizOrderOperationTypeEnum.AUDIT,
                WAIT_BORROW,
                WAIT_SIGN);

        OrderBaseResponse auditResp = bizOrderStatusService.audit(inDealRiskAuditSuccReq);
        System.out.println(auditResp);
        Assert.assertNull(auditResp.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), auditResp.getResultCode());

        // b. 簽約,處理簽約過(guò)程中的請(qǐng)求數(shù)據(jù)祭衩,這里最好把所有數(shù)據(jù)都傳入灶体,數(shù)據(jù)一定要做校驗(yàn)的

        // b.1 最外層數(shù)據(jù)
        BizOrderCreateRequest bizOrderCreateRequest = new BizOrderCreateRequest();
        bizOrderCreateRequest.setBizCode(response.getBizOrderId());
        bizOrderCreateRequest.setOperationType(BizOrderOperationTypeEnum.SIGN.getOperationType());
        bizOrderCreateRequest.setSourceId(IDGenerater.getUniId());
        bizOrderCreateRequest.setCallSystem("wyd");

        // b.2 訂單主數(shù)據(jù)
        BizOrderCreateModel createModel = new BizOrderCreateModel();
        createModel.setBizOrderId(bizOrderCreateRequest.getBizCode());
//        createModel.setOrderStatus(BizOrderStatusEnum.SIGNED.getStatus());
        createModel.setBizType(BizOrderBizTypeEnum.EMPLOAN.getOrderBizType());
        createModel.setUserId(bizOrderModel.getUserId());
        createModel.setContractId(bizOrderModel.getContractId());
        createModel.setMerchantId(bizOrderModel.getMerchantId());
        createModel.setProdId(bizOrderModel.getProdId());
        createModel.setProdCode(bizOrderModel.getProdCode());

        // b.3 資金相關(guān)  --- 注意,資金信息需要保持平衡
        createModel.setAmount(14.5);
        createModel.setRealAmount(10.89);
        createModel.setRepayType("等額本金");
        createModel.setScene("個(gè)人消費(fèi)");
        createModel.setRate(0.0035);
        createModel.setRateType(RateTypeEnum.DAY.getRateType());
        createModel.setOverdueRate(0.007);
        createModel.setOverdueRateType(RateTypeEnum.DAY.getRateType());
        createModel.setLoanStartDate(Date.from(Instant.now()));
        createModel.setLoanEndDate(Date.from(Instant.now().plus(30, ChronoUnit.DAYS)));

        bizOrderCreateRequest.setBizOrderCreateModel(createModel);

        // b.4 上傳貸款合同  -- 可省略掐暮,本次在測(cè)試蝎抽,構(gòu)造全量數(shù)據(jù)
        BizOrderLoanContractUploadModel model1 = new BizOrderLoanContractUploadModel();
        model1.setContractNo("ab0011005");
        model1.setContractContent("https://www.vipshop.com/files/contentab0011aa00.pdf");

        BizOrderLoanContractUploadModel model2 = new BizOrderLoanContractUploadModel();
        model2.setContractNo("abc000111");
        model2.setContractContent("http://sina.com/fileserver/contentabc000111.txt");

        bizOrderCreateRequest.setContractModels(Lists.newArrayList(
                model1, model2
        ));

        // b.5 活動(dòng)信息  -- 可不傳,本次測(cè)試路克,構(gòu)造全量數(shù)據(jù)
        BizOrderActivityCreateModel activity1 = new BizOrderActivityCreateModel();
        activity1.setActivityCode("ac001001");
        activity1.setActivityName("優(yōu)惠券");
        activity1.setActivityType("COUPON");
        activity1.setActivitySrc("唯品會(huì)419大促金融分會(huì)館");
        activity1.setCouponAmount(1.22);
        activity1.setEffectTime(Date.from(Instant.now().plus(-1, ChronoUnit.DAYS)));
        activity1.setSerialNo("c293573272572385782937592759237");

        BizOrderActivityCreateModel activity2 = new BizOrderActivityCreateModel();
        activity2.setActivitySrc("唯品會(huì)419大促金融沖擊波");
        activity2.setActivityType("DISCOUNT");
        activity2.setActivityName("活動(dòng)優(yōu)惠立減 1%利息");
        activity2.setActivityCode("DS00120101");
        activity2.setDiscountRate(0.01);
        activity2.setDiscountRateSrc("唯品會(huì)");
        activity2.setDiscountRateType(RateTypeEnum.DAY.getRateType());
        activity2.setSerialNo("DS0010101010438503038930894");

        bizOrderCreateRequest.setActivityModels(Lists.newArrayList(
                activity1, activity2
        ));

        // b.6 放款渠道
        BizOrderChannelCreateModel channelCreateModel1 = new BizOrderChannelCreateModel();
        channelCreateModel1.setChannelNo("CASH0001");
        channelCreateModel1.setChannelAmount(5);
        channelCreateModel1.setChannelName("自有資金");

        BizOrderChannelCreateModel channelCreateModel2 = new BizOrderChannelCreateModel();
        channelCreateModel2.setChannelNo("CASH001-BANK");
        channelCreateModel2.setChannelAmount(5.89);
        channelCreateModel2.setChannelName("1號(hào)銀行渠道");

        bizOrderCreateRequest.setChannelModels(Lists.newArrayList(channelCreateModel1, channelCreateModel2));

        // c.6 擴(kuò)展信息更新
        BizOrderExtendsCreateModel extendsCreateModel = new BizOrderExtendsCreateModel();
        extendsCreateModel.setRepayDate(Date.from(Instant.now().plus(-15, ChronoUnit.DAYS)));
        extendsCreateModel.setGoodsName("update-ada");
        bizOrderCreateRequest.setExtendsCreateModel(extendsCreateModel);


        // c. 簽約
        OrderBaseResponse signResp = bizOrderCreateService.createFromSign(bizOrderCreateRequest);
        System.out.println(signResp);
        Assert.assertNull(signResp.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), signResp.getResultCode());

        // d. 校驗(yàn)
        SingleOrderResponse queryResponse = bizOrderQueryService.findOrderByBizOrderId(response.getBizOrderId());
        Assert.assertNull(queryResponse.getMsg());
        Assert.assertEquals(BizOrderErrorCode.SUCCESS.name(), queryResponse.getResultCode());
        Assert.assertEquals(BizOrderStatusEnum.SIGNED.getStatus(), queryResponse.getOrderModel().getOrderStatus());

        return response.getBizOrderId();
    }

    private BizOrderCreateRequest wrapCreateRequest(BizOrderStatusEnum targetStatus) {
        init();
        BizOrderCreateRequest createRequest = new BizOrderCreateRequest();

        createRequest.setBizCode("001"); // 創(chuàng)建時(shí)指定傳輸內(nèi)容001
        createRequest.setSourceId(IDGenerater.getUniId());
        createRequest.setOperationType(BizOrderOperationTypeEnum.CREATE_ORDER.getOperationType());
        createRequest.setCallSystem("vip-pay-2");

        BizOrderCreateModel createModel = new BizOrderCreateModel();
        createRequest.setBizOrderCreateModel(createModel);

        createModel.setUserId(131415161788l);
        createModel.setMerchantId(8l);
        createModel.setContractId(3l);
        createModel.setProdId(20l);
//        createModel.setProdCode(); 可為空
        createModel.setBizType(BizOrderBizTypeEnum.EMPLOAN.getOrderBizType()); // 無(wú)憂(yōu)貸
        createModel.setOrderStatus(targetStatus.getStatus());
        createModel.setOrderSrc("vipfins-ios");

        BizOrderExtendsCreateModel extendsModel = new BizOrderExtendsCreateModel();
        createRequest.setExtendsCreateModel(extendsModel);

        extendsModel.setUserRealname("張小強(qiáng)");
        // 10天之后還款
        extendsModel.setRepayDate(Date.from(Instant.now().plus(10, ChronoUnit.DAYS)));


        if (log.isDebugEnabled()) {
            log.debug("debug log level");
        }

        return createRequest;
    }

這里使用junit樟结,模擬整個(gè)訂單的生命周期,發(fā)送對(duì)應(yīng)的事件event驅(qū)動(dòng)整個(gè)過(guò)程精算。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瓢宦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子灰羽,更是在濱河造成了極大的恐慌刁笙,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谦趣,死亡現(xiàn)場(chǎng)離奇詭異疲吸,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)前鹅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)摘悴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人舰绘,你說(shuō)我怎么就攤上這事蹂喻。” “怎么了捂寿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵口四,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我秦陋,道長(zhǎng)蔓彩,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮赤嚼,結(jié)果婚禮上旷赖,老公的妹妹穿的比我還像新娘。我一直安慰自己更卒,他們只是感情好等孵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蹂空,像睡著了一般俯萌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上上枕,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天咐熙,我揣著相機(jī)與錄音,去河邊找鬼姿骏。 笑死糖声,一個(gè)胖子當(dāng)著我的面吹牛斤彼,可吹牛的內(nèi)容都是我干的分瘦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼琉苇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼嘲玫!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起并扇,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤去团,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后穷蛹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體土陪,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年肴熏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鬼雀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蛙吏,死狀恐怖源哩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鸦做,我是刑警寧澤励烦,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站泼诱,受9級(jí)特大地震影響坛掠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一却音、第九天 我趴在偏房一處隱蔽的房頂上張望改抡。 院中可真熱鬧,春花似錦系瓢、人聲如沸阿纤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)欠拾。三九已至,卻和暖如春骗绕,著一層夾襖步出監(jiān)牢的瞬間藐窄,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工酬土, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荆忍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓撤缴,卻偏偏與公主長(zhǎng)得像刹枉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子屈呕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容