Java端模拟日志数据

package com.xxxx.appclient;

import java.io.UnsupportedEncodingException;

import java.util.Random;

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONArray;

import com.alibaba.fastjson.JSONObject;

import com.xxxx.bean.*;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

* 日志行为数据模拟

*/

public class AppMain {

private final static Loggerlogger = LoggerFactory.getLogger(AppMain.class);

    private static Randomrand =new Random();

    // 设备id

    private static int s_mid =0;

    // 用户id

    private static int s_uid =0;

    // 商品id

    private static int s_goodsid =0;

    public static void main(String[] args) {

// 参数一:控制发送每条的延时时间,默认是0

        Long delay = args.length >0 ? Long.parseLong(args[0]) :0L;

        // 参数二:循环遍历次数

        int loop_len = args.length >1 ? Integer.parseInt(args[1]) :1000;

        // 生成数据

        generateLog(delay, loop_len);

    }

private static void generateLog(Long delay, int loop_len) {

for (int i =0; i < loop_len; i++) {

int flag =rand.nextInt(2);

            switch (flag) {

case (0):

//应用启动

                    AppStart appStart =generateStart();

                    String jsonString = JSON.toJSONString(appStart);

                    //控制台打印

                    logger.info(jsonString);

break;

                case (1):

JSONObject json =new JSONObject();

                    json.put("ap", "app");

                    json.put("cm", generateComFields());

                    JSONArray eventsArray =new JSONArray();

                    // 事件日志

                    // 商品点击,展示

                    if (rand.nextBoolean()) {

eventsArray.add(generateDisplay());

                        json.put("et", eventsArray);

                    }

// 商品详情页

                    if (rand.nextBoolean()) {

eventsArray.add(generateNewsDetail());

                        json.put("et", eventsArray);

                    }

// 商品列表页

                    if (rand.nextBoolean()) {

eventsArray.add(generateNewList());

                        json.put("et", eventsArray);

                    }

// 广告

                    if (rand.nextBoolean()) {

eventsArray.add(generateAd());

                        json.put("et", eventsArray);

                    }

// 消息通知

                    if (rand.nextBoolean()) {

eventsArray.add(generateNotification());

                        json.put("et", eventsArray);

                    }

// 用户后台活跃

                    if (rand.nextBoolean()) {

eventsArray.add(generateBackground());

                        json.put("et", eventsArray);

                    }

//故障日志

                    if (rand.nextBoolean()) {

eventsArray.add(generateError());

                        json.put("et", eventsArray);

                    }

// 用户评论

                    if (rand.nextBoolean()) {

eventsArray.add(generateComment());

                        json.put("et", eventsArray);

                    }

// 用户收藏

                    if (rand.nextBoolean()) {

eventsArray.add(generateFavorites());

                        json.put("et", eventsArray);

                    }

// 用户点赞

                    if (rand.nextBoolean()) {

eventsArray.add(generatePraise());

                        json.put("et", eventsArray);

                    }

//时间

                    long millis = System.currentTimeMillis();

                    //控制台打印

                    logger.info(millis +"|" + json.toJSONString());

break;

            }

// 延迟

            try {

Thread.sleep(delay);

            }catch (InterruptedException e) {

e.printStackTrace();

            }

}

}

/**

    * 公共字段设置

    */

    private static JSONObjectgenerateComFields() {

AppBase appBase =new AppBase();

        //设备id

        appBase.setMid(s_mid +"");

        s_mid++;

        // 用户id

        appBase.setUid(s_uid +"");

        s_uid++;

        // 程序版本号 5,6等

        appBase.setVc("" +rand.nextInt(20));

        //程序版本名v1.1.1

        appBase.setVn("1." +rand.nextInt(4) +"." +rand.nextInt(10));

        // 安卓系统版本

        appBase.setOs("8." +rand.nextInt(3) +"." +rand.nextInt(10));

        // 语言es,en,pt

        int flag =rand.nextInt(3);

        switch (flag) {

case (0):

appBase.setL("es");

break;

            case (1):

appBase.setL("en");

break;

            case (2):

appBase.setL("pt");

break;

        }

// 渠道号  从哪个渠道来的

        appBase.setSr(getRandomChar(1));

        // 区域

        flag =rand.nextInt(2);

        switch (flag) {

case 0:

appBase.setAr("BR");

            case 1:

appBase.setAr("MX");

        }

// 手机品牌 ba ,手机型号 md,就取2位数字了

        flag =rand.nextInt(3);

        switch (flag) {

case 0:

appBase.setBa("Sumsung");

                appBase.setMd("sumsung-" +rand.nextInt(20));

break;

            case 1:

appBase.setBa("Huawei");

                appBase.setMd("Huawei-" +rand.nextInt(20));

break;

            case 2:

appBase.setBa("HTC");

                appBase.setMd("HTC-" +rand.nextInt(20));

break;

        }

// 嵌入sdk的版本

        appBase.setSv("V2." +rand.nextInt(10) +"." +rand.nextInt(10));

        // gmail

        appBase.setG(getRandomCharAndNumr(8) +"@gmail.com");

        // 屏幕宽高hw

        flag =rand.nextInt(4);

        switch (flag) {

case 0:

appBase.setHw("640*960");

break;

            case 1:

appBase.setHw("640*1136");

break;

            case 2:

appBase.setHw("750*1134");

break;

            case 3:

appBase.setHw("1080*1920");

break;

        }

// 客户端产生日志时间

        long millis = System.currentTimeMillis();

        appBase.setT("" + (millis -rand.nextInt(99999999)));

        // 手机网络模式3G,4G,WIFI

        flag =rand.nextInt(3);

        switch (flag) {

case 0:

appBase.setNw("3G");

break;

            case 1:

appBase.setNw("4G");

break;

            case 2:

appBase.setNw("WIFI");

break;

        }

// 拉丁美洲 西经34°46′至西经117°09;北纬32°42′至南纬53°54′

        // 经度

        appBase.setLn((-34 -rand.nextInt(83) -rand.nextInt(60) /10.0) +"");

        // 纬度

        appBase.setLa((32 -rand.nextInt(85) -rand.nextInt(60) /10.0) +"");

        return (JSONObject) JSON.toJSON(appBase);

    }

/**

    * 商品展示事件

    */

    private static JSONObjectgenerateDisplay() {

AppDisplay appDisplay =new AppDisplay();

        boolean boolFlag =rand.nextInt(10) <7;

        // 动作:曝光商品=1,点击商品=2,

        if (boolFlag) {

appDisplay.setAction("1");

        }else {

appDisplay.setAction("2");

        }

// 商品id

        String goodsId =s_goodsid +"";

        s_goodsid++;

        appDisplay.setGoodsid(goodsId);

        // 顺序  设置成6条吧

        int flag =rand.nextInt(6);

        appDisplay.setPlace("" + flag);

        // 曝光类型

        flag =1 +rand.nextInt(2);

        appDisplay.setExtend1("" + flag);

        // 分类

        flag =1 +rand.nextInt(100);

        appDisplay.setCategory("" + flag);

        JSONObject jsonObject = (JSONObject) JSON.toJSON(appDisplay);

        return packEventJson("display", jsonObject);

    }

/**

    * 商品详情页

    */

    private static JSONObjectgenerateNewsDetail() {

AppNewsDetail appNewsDetail =new AppNewsDetail();

        // 页面入口来源

        int flag =1 +rand.nextInt(3);

        appNewsDetail.setEntry(flag +"");

        // 动作

        appNewsDetail.setAction("" + (rand.nextInt(4) +1));

        // 商品id

        appNewsDetail.setGoodsid(s_goodsid +"");

        // 商品来源类型

        flag =1 +rand.nextInt(3);

        appNewsDetail.setShowtype(flag +"");

        // 商品样式

        flag =rand.nextInt(6);

        appNewsDetail.setShowtype("" + flag);

        // 页面停留时长

        flag =rand.nextInt(10) *rand.nextInt(7);

        appNewsDetail.setNews_staytime(flag +"");

        // 加载时长

        flag =rand.nextInt(10) *rand.nextInt(7);

        appNewsDetail.setLoading_time(flag +"");

        // 加载失败码

        flag =rand.nextInt(10);

        switch (flag) {

case 1:

appNewsDetail.setType1("102");

break;

            case 2:

appNewsDetail.setType1("201");

break;

            case 3:

appNewsDetail.setType1("325");

break;

            case 4:

appNewsDetail.setType1("433");

break;

            case 5:

appNewsDetail.setType1("542");

break;

            default:

appNewsDetail.setType1("");

break;

        }

// 分类

        flag =1 +rand.nextInt(100);

        appNewsDetail.setCategory("" + flag);

        JSONObject eventJson = (JSONObject) JSON.toJSON(appNewsDetail);

        return packEventJson("newsdetail", eventJson);

    }

/**

    * 商品列表

    */

    private static JSONObjectgenerateNewList() {

AppLoading appLoading =new AppLoading();

        // 动作

        int flag =rand.nextInt(3) +1;

        appLoading.setAction(flag +"");

        // 加载时长

        flag =rand.nextInt(10) *rand.nextInt(7);

        appLoading.setLoading_time(flag +"");

        // 失败码

        flag =rand.nextInt(10);

        switch (flag) {

case 1:

appLoading.setType1("102");

break;

            case 2:

appLoading.setType1("201");

break;

            case 3:

appLoading.setType1("325");

break;

            case 4:

appLoading.setType1("433");

break;

            case 5:

appLoading.setType1("542");

break;

            default:

appLoading.setType1("");

break;

        }

// 页面  加载类型

        flag =1 +rand.nextInt(2);

        appLoading.setLoading_way("" + flag);

        // 扩展字段1

        appLoading.setExtend1("");

        // 扩展字段2

        appLoading.setExtend2("");

        // 用户加载类型

        flag =1 +rand.nextInt(3);

        appLoading.setType("" + flag);

        JSONObject jsonObject = (JSONObject) JSON.toJSON(appLoading);

        return packEventJson("loading", jsonObject);

    }

/**

    * 广告相关字段

    */

    private static JSONObjectgenerateAd() {

AppAd appAd =new AppAd();

        // 入口

        int flag =rand.nextInt(3) +1;

        appAd.setEntry(flag +"");

        // 动作

        flag =rand.nextInt(5) +1;

        appAd.setAction(flag +"");

        // 内容类型类型

        flag =rand.nextInt(6)+1;

        appAd.setContentType(flag+"");

        // 展示样式

        flag =rand.nextInt(120000)+1000;

        appAd.setDisplayMills(flag+"");

        flag=rand.nextInt(1);

        if(flag==1){

appAd.setContentType(flag+"");

            flag =rand.nextInt(6);

            appAd.setItemId(flag+"");

        }else{

appAd.setContentType(flag+"");

            flag =rand.nextInt(1)+1;

            appAd.setActivityId(flag+"");

        }

JSONObject jsonObject = (JSONObject) JSON.toJSON(appAd);

        return packEventJson("ad", jsonObject);

    }

/**

    * 启动日志

    */

    private static AppStartgenerateStart() {

AppStart appStart =new AppStart();

        //设备id

        appStart.setMid(s_mid +"");

        s_mid++;

        // 用户id

        appStart.setUid(s_uid +"");

        s_uid++;

        // 程序版本号 5,6等

        appStart.setVc("" +rand.nextInt(20));

        //程序版本名v1.1.1

        appStart.setVn("1." +rand.nextInt(4) +"." +rand.nextInt(10));

        // 安卓系统版本

        appStart.setOs("8." +rand.nextInt(3) +"." +rand.nextInt(10));

        //设置日志类型

        appStart.setEn("start");

        //    语言es,en,pt

        int flag =rand.nextInt(3);

        switch (flag) {

case (0):

appStart.setL("es");

break;

            case (1):

appStart.setL("en");

break;

            case (2):

appStart.setL("pt");

break;

        }

// 渠道号  从哪个渠道来的

        appStart.setSr(getRandomChar(1));

        // 区域

        flag =rand.nextInt(2);

        switch (flag) {

case 0:

appStart.setAr("BR");

            case 1:

appStart.setAr("MX");

        }

// 手机品牌 ba ,手机型号 md,就取2位数字了

        flag =rand.nextInt(3);

        switch (flag) {

case 0:

appStart.setBa("Sumsung");

                appStart.setMd("sumsung-" +rand.nextInt(20));

break;

            case 1:

appStart.setBa("Huawei");

                appStart.setMd("Huawei-" +rand.nextInt(20));

break;

            case 2:

appStart.setBa("HTC");

                appStart.setMd("HTC-" +rand.nextInt(20));

break;

        }

// 嵌入sdk的版本

        appStart.setSv("V2." +rand.nextInt(10) +"." +rand.nextInt(10));

        // gmail

        appStart.setG(getRandomCharAndNumr(8) +"@gmail.com");

        // 屏幕宽高hw

        flag =rand.nextInt(4);

        switch (flag) {

case 0:

appStart.setHw("640*960");

break;

            case 1:

appStart.setHw("640*1136");

break;

            case 2:

appStart.setHw("750*1134");

break;

            case 3:

appStart.setHw("1080*1920");

break;

        }

// 客户端产生日志时间

        long millis = System.currentTimeMillis();

        appStart.setT("" + (millis -rand.nextInt(99999999)));

        // 手机网络模式3G,4G,WIFI

        flag =rand.nextInt(3);

        switch (flag) {

case 0:

appStart.setNw("3G");

break;

            case 1:

appStart.setNw("4G");

break;

            case 2:

appStart.setNw("WIFI");

break;

        }

// 拉丁美洲 西经34°46′至西经117°09;北纬32°42′至南纬53°54′

        // 经度

        appStart.setLn((-34 -rand.nextInt(83) -rand.nextInt(60) /10.0) +"");

        // 纬度

        appStart.setLa((32 -rand.nextInt(85) -rand.nextInt(60) /10.0) +"");

        // 入口

        flag =rand.nextInt(5) +1;

        appStart.setEntry(flag +"");

        // 开屏广告类型

        flag =rand.nextInt(2) +1;

        appStart.setOpen_ad_type(flag +"");

        // 状态

        flag =rand.nextInt(10) >8 ?2 :1;

        appStart.setAction(flag +"");

        // 加载时长

        appStart.setLoading_time(rand.nextInt(20) +"");

        // 失败码

        flag =rand.nextInt(10);

        switch (flag) {

case 1:

appStart.setDetail("102");

break;

            case 2:

appStart.setDetail("201");

break;

            case 3:

appStart.setDetail("325");

break;

            case 4:

appStart.setDetail("433");

break;

            case 5:

appStart.setDetail("542");

break;

            default:

appStart.setDetail("");

break;

        }

// 扩展字段

        appStart.setExtend1("");

        return appStart;

    }

/**

    * 消息通知

    */

    private static JSONObjectgenerateNotification() {

AppNotification appNotification =new AppNotification();

        int flag =rand.nextInt(4) +1;

        // 动作

        appNotification.setAction(flag +"");

        // 通知id

        flag =rand.nextInt(4) +1;

        appNotification.setType(flag +"");

        // 客户端弹时间

        appNotification.setAp_time((System.currentTimeMillis() -rand.nextInt(99999999)) +"");

        // 备用字段

        appNotification.setContent("");

        JSONObject jsonObject = (JSONObject) JSON.toJSON(appNotification);

        return packEventJson("notification", jsonObject);

    }

/**

    * 后台活跃

    */

    private static JSONObjectgenerateBackground() {

AppActive_background appActive_background =new AppActive_background();

        // 启动源

        int flag =rand.nextInt(3) +1;

        appActive_background.setActive_source(flag +"");

        JSONObject jsonObject = (JSONObject) JSON.toJSON(appActive_background);

        return packEventJson("active_background", jsonObject);

    }

/**

    * 错误日志数据

    */

    private static JSONObjectgenerateError() {

AppErrorLog appErrorLog =new AppErrorLog();

        String[] errorBriefs = {"at cn.lift.dfdf.web.AbstractBaseController.validInbound(AbstractBaseController.java:72)", "at cn.lift.appIn.control.CommandUtil.getInfo(CommandUtil.java:67)"};        //错误摘要

        String[] errorDetails = {"java.lang.NullPointerException\\n    " +"at cn.lift.appIn.web.AbstractBaseController.validInbound(AbstractBaseController.java:72)\\n " +"at cn.lift.dfdf.web.AbstractBaseController.validInbound", "at cn.lift.dfdfdf.control.CommandUtil.getInfo(CommandUtil.java:67)\\n " +"at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\\n" +" at java.lang.reflect.Method.invoke(Method.java:606)\\n"};        //错误详情

        //错误摘要

        appErrorLog.setErrorBrief(errorBriefs[rand.nextInt(errorBriefs.length)]);

        //错误详情

        appErrorLog.setErrorDetail(errorDetails[rand.nextInt(errorDetails.length)]);

        JSONObject jsonObject = (JSONObject) JSON.toJSON(appErrorLog);

        return packEventJson("error", jsonObject);

    }

/**

    * 为各个事件类型的公共字段(时间、事件类型、Json数据)拼接

    */

    private static JSONObjectpackEventJson(String eventName, JSONObject jsonObject) {

JSONObject eventJson =new JSONObject();

        eventJson.put("ett", (System.currentTimeMillis() -rand.nextInt(99999999)) +"");

        eventJson.put("en", eventName);

        eventJson.put("kv", jsonObject);

        return eventJson;

    }

/**

    * 获取随机字母组合

    *

    * @param length 字符串长度

    */

    private static StringgetRandomChar(Integer length) {

StringBuilder str =new StringBuilder();

        Random random =new Random();

        for (int i =0; i < length; i++) {

// 字符串

            str.append((char) (65 + random.nextInt(26)));// 取得大写字母

        }

return str.toString();

    }

/**

    * 获取随机字母数字组合

    * @param length 字符串长度

    */

    private static StringgetRandomCharAndNumr(Integer length) {

StringBuilder str =new StringBuilder();

        Random random =new Random();

        for (int i =0; i < length; i++) {

boolean b = random.nextBoolean();

            if (b) {// 字符串

                // int choice = random.nextBoolean() ? 65 : 97; 取得65大写字母还是97小写字母

                str.append((char) (65 + random.nextInt(26)));// 取得大写字母

            }else {// 数字

                str.append(String.valueOf(random.nextInt(10)));

            }

}

return str.toString();

    }

/**

    * 收藏

    */

    private static JSONObjectgenerateFavorites() {

AppFavorites favorites =new AppFavorites();

        favorites.setCourse_id(rand.nextInt(10));

        favorites.setUserid(rand.nextInt(10));

        favorites.setAdd_time((System.currentTimeMillis() -rand.nextInt(99999999)) +"");

        JSONObject jsonObject = (JSONObject) JSON.toJSON(favorites);

        return packEventJson("favorites", jsonObject);

    }

/**

    * 点赞

    */

    private static JSONObjectgeneratePraise() {

AppPraise praise =new AppPraise();

        praise.setId(rand.nextInt(10));

        praise.setUserid(rand.nextInt(10));

        praise.setTarget_id(rand.nextInt(10));

        praise.setType(rand.nextInt(4) +1);

        praise.setAdd_time((System.currentTimeMillis() -rand.nextInt(99999999)) +"");

        JSONObject jsonObject = (JSONObject) JSON.toJSON(praise);

        return packEventJson("praise", jsonObject);

    }

/**

    * 评论

    */

    private static JSONObjectgenerateComment() {

AppComment comment =new AppComment();

        comment.setComment_id(rand.nextInt(10));

        comment.setUserid(rand.nextInt(10));

        comment.setP_comment_id(rand.nextInt(5));

        comment.setContent(getCONTENT());

        comment.setAddtime((System.currentTimeMillis() -rand.nextInt(99999999)) +"");

        comment.setOther_id(rand.nextInt(10));

        comment.setPraise_count(rand.nextInt(1000));

        comment.setReply_count(rand.nextInt(200));

        JSONObject jsonObject = (JSONObject) JSON.toJSON(comment);

        return packEventJson("comment", jsonObject);

    }

/**

    * 生成单个汉字

    */

    private static char getRandomChar() {

String str ="";

        int hightPos; //

        int lowPos;

        Random random =new Random();

        //随机生成汉子的两个字节

        hightPos = (176 + Math.abs(random.nextInt(39)));

        lowPos = (161 + Math.abs(random.nextInt(93)));

        byte[] b =new byte[2];

        b[0] = (Integer.valueOf(hightPos)).byteValue();

        b[1] = (Integer.valueOf(lowPos)).byteValue();

        try {

str =new String(b, "GBK");

        }catch (UnsupportedEncodingException e) {

e.printStackTrace();

            System.out.println("错误");

        }

return str.charAt(0);

    }

/**

    * 拼接成多个汉字

    */

    private static StringgetCONTENT() {

StringBuilder str =new StringBuilder();

        for (int i =0; i

str.append(getRandomChar());

        }

return str.toString();

    }

}


下面是bean对象,一个类对应一张表:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342