使用SpringBoot-MongoDB实现物流订单系统
❗❗❗本文最后更新于 363 天前,其中的信息可能已经过时;如有错误请在文章下方评论✅,欢迎纠错🥰!

1.配置Spring boot运行环境

1.1创建项目

(1)在IDEA中新建项目,生成器选择Spring Initializr。其中语言选择Java,类型选择Maven,组与工件设置好后,名称与软件包名称随之变化。JDK版本大于等于Java版本,点击下一步。

 

(2)Spring Boot版本默认为2.7.5,依赖项:Developer Tools选择Lombok,Web选择Spring Web,NoSQL选择Spring Data MongoDB,点击创建。

 

1.2导入并配置Maven

(1)IDEA会自动同步该项目的依赖项与插件并导入Maven,等待即可。

(2)进入IDEA设置,依次进入“构建、执行、部署——构建工具——Maven”,设置Maven主路径、用户设置文件、本地仓库。

 

(3)在pom.xml中的dependencies标签下追加以下内容:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.6.3</version>
</dependency>

(4)在pom.xml中的build标签下有plugin标签,此处可能会报错,可在artifactId标签后加入version标签,填入2.7.5,点击右上角的变更按钮,即可完成插件同步。

 

 

1.3配置MongoDB

(1)在项目根目录下的src目录下存在resources文件夹,双击文件夹下的application.properties文件,输入

spring.data.mongodb.uri = mongodb://localhost:27017/bigdatadb

(2)到此,Spring Boot的运行环境已经搭建完成,下面将进行前后端项目的部署与页面实现。

2.实现订单添加功能

2.1Order类

package cn.bipt.bigdata2022.pojo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 订单
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Order implements Serializable {
    private String id; // 订单编号
    private String status; // 订单状态
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date orderTime; // 下单时间
    private String shipper; // 发货人
    private String shipperAddress; // 发货人地址
    private String shipperPhone; // 发货人电话
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date shipTime; // 发货时间
    private String receiver; // 收货人
    private String receiverAddress; // 收货人地址
    private String receiverPhone; // 收货人电话
    private List<Logistics> logistics; // 物流信息
}

2.2Logistics类

package cn.bipt.bigdata2022.pojo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* 物流
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Logistics implements Serializable {
    private String orderId; // 订单编号
    private String operation; // 操作名称
    private String operator; // 操作员
    private String phone; // 操作员电话
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date operationTime; // 操作时间
    private String address; // 操作地址
    private String details; // 详细信息
}

2.3OrderService类

package cn.bipt.bigdata2022.service;
import cn.hutool.core.util.IdUtil;
import cn.bipt.bigdata2022.pojo.Logistics;
import cn.bipt.bigdata2022.pojo.Order;
import com.mongodb.client.result.DeleteResult;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class OrderService {
    @Resource
    private MongoTemplate mongoTemplate;
    /**
    * 添加订单至 MongoDB
    *
    * @param order
    */
    public void addOrder(Order order) {
    // 订单编号根据雪花算法生成
    order.setId(IdUtil.getSnowflake(1, 1).nextIdStr());
    // 设置订单状态
    order.setStatus("已下单");
    // 设置下单时间
    order.setOrderTime(new Date());
    // 设置发货时间
    order.setShipTime(new Date());
    // 添加订单至 MongoDB
    mongoTemplate.insert(order, "order");
    }
    /**
    * 更新订单信息
    * 追加物流信息
    *
    * @param logistics
    */
    public void updateOrderAndAddLogistics(Logistics logistics) {
        // 获取操作名称
        String status = logistics.getOperation();
        // 设置操作时间
        logistics.setOperationTime(new Date());
        // 初始化 Query 对象,根据订单编号查询
        Query query = new Query(Criteria.where("_id").is(logistics.getOrderId()));
        // 初始化 Update 对象
        Update update = new Update();
        // 更新订单状态
        update.set("status", status);
        // 追加物流信息
        update.push("logistics", logistics);
        // 更新订单信息
        mongoTemplate.upsert(query, update, Order.class, "order");
    }
    /**
    * 通过订单编号查询
    *
    * @param id
    * @return
    */
    public Order selectOrderById(String id) {
        // 初始化 Query 对象,根据订单编号查询
        Query query = new Query(Criteria.where("_id").is(id));
        return mongoTemplate.findOne(query, Order.class, "order");
    }
    /**
    * 查询所有订单
    *
    * @return
    */
    public Map<String, Object> selectOrderList() {
        List<Order> list = mongoTemplate.findAll(Order.class, "order");
        Map<String, Object> result = new HashMap<>();
        if (list == null || list.isEmpty()) {
        result.put("code", "400");
        result.put("message", "没有相关订单信息");
        } else {
            result.put("code", "0");
            result.put("count", list.size());
            result.put("data", list);
        }
        return result;
    }
    /**
    * 根据订单编号删除订单记录
    *
    * @param id
    * @return
    */
    public boolean deleteOrderById(String id) {
        // 初始化 Query 对象,根据订单编号查询
        Query query = new Query(Criteria.where("_id").is(id));
        DeleteResult result = mongoTemplate.remove(query, Order.class, "order");
        return result.getDeletedCount() > 0 ? true : false;
    }

}

2.4OrderController类

package cn.bipt.bigdata2022.controller
import cn.bipt.bigdata2022.pojo.Logistics;
import cn.bipt.bigdata2022.pojo.Order;
import cn.bipt.bigdata2022.service.OrderService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Map;
@RestController
@RequestMapping("order")
public class OrderController {
@Resource
private OrderService orderService;
/**
* 添加订单至 MongoDB
*
* @param order
* @return
*/
@PostMapping("add")
public String addOrder(Order order) {
System.out.println(1);
orderService.addOrder(order); return "订单添加成功";
}
/**
* 更新订单信息
* 添加物流信息
*
* @param logistics
* @return
*/
@PostMapping("update")
public String updateOrderAndAddLogistics(Logistics logistics) {
orderService.updateOrderAndAddLogistics(logistics);
return "物流添加成功";
}
/**
* 通过订单编号查询
*
* @param id
* @return
*/
@GetMapping("{id}")
public Order selectOrderById(@PathVariable String id) {
return orderService.selectOrderById(id);
}
/**
* 查询所有订单
*
* @return
*/
@GetMapping("list")
public Map<String, Object> selectOrderList() {
return orderService.selectOrderList();
}
/**
* 根据订单编号删除订单记录
*
* @param id
* @return
*/
@PostMapping("delete")
public String deleteById(String id) {
orderService.deleteOrderById(id);
return "删除成功";
}
}

2.5index.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <title>物流管理系统</title>
  <link crossorigin="anonymous" integrity="sha512-SSF+OBDODWTSIqOivYBOyOKQ93PBDevipJEUEWtkUbTt4v34rmgPcCXcBMolxZIJcuobcdqmYJlonjUBEbOzNw==" href="https://lib.baomitu.com/layui/2.7.6/css/layui.css" rel="stylesheet">
</head>
<body>
<div class="layui-layout layui-layout-admin">
  <div class="layui-header">
    <div class="layui-logo layui-hide-xs layui-bg-black">物流管理系统</div>
    <!-- 头部区域(可配合layui 已有的水平导航) -->
    <ul class="layui-nav layui-layout-left">
      <!-- 移动端显示 -->
      <li class="layui-nav-item layui-show-xs-inline-block layui-hide-sm" lay-header-event="menuLeft">
        <i class="layui-icon layui-icon-spread-left"></i>
      </li>

      <li class="layui-nav-item layui-hide-xs"><a href="">nav 1</a></li>
      <li class="layui-nav-item layui-hide-xs"><a href="">nav 2</a></li>
      <li class="layui-nav-item layui-hide-xs"><a href="">nav 3</a></li>
      <li class="layui-nav-item">
        <a href="javascript:;">nav groups</a>
        <dl class="layui-nav-child">
          <dd><a href="">menu 11</a></dd>
          <dd><a href="">menu 22</a></dd>
          <dd><a href="">menu 33</a></dd>
        </dl>
      </li>
    </ul>
    <ul class="layui-nav layui-layout-right">
      <li class="layui-nav-item layui-hide layui-show-md-inline-block">
        <a href="javascript:;">
          <img src="//tva1.sinaimg.cn/crop.0.0.118.118.180/5db11ff4gw1e77d3nqrv8j203b03cweg.jpg" class="layui-nav-img">
          Viper3
        </a>
        <dl class="layui-nav-child">
          <dd><a href="">Your Profile</a></dd>
          <dd><a href="">Settings</a></dd>
          <dd><a href="">Sign out</a></dd>
        </dl>
      </li>
      <li class="layui-nav-item" lay-header-event="menuRight" lay-unselect>
        <a href="javascript:;">
          <i class="layui-icon layui-icon-more-vertical"></i>
        </a>
      </li>
    </ul>
  </div>

  <div class="layui-side layui-bg-black">
    <div class="layui-side-scroll">
      <!-- 左侧导航区域(可配合layui已有的垂直导航) -->
      <ul class="layui-nav layui-nav-tree" lay-filter="test">
        <li class="layui-nav-item layui-nav-itemed">
          <a class="" href="javascript:;">物流管理</a>
          <dl class="layui-nav-child">
            <dd><a href="add-order.html" target="index">添加订单</a></dd>
            <dd><a href="add-logistics.html" target="index">添加物流信息</a></dd>
            <dd><a href="order-manage.html" target="index">订单管理</a></dd>
          </dl>
        </li>
      </ul>
    </div>
  </div>

  <div class="layui-body">
    <!-- 内容主体区域 -->
    <iframe width="99%" height="100%" name="index"></iframe>
  </div>

  <div class="layui-footer">
    <!-- 底部固定区域 -->
    底部固定区域
  </div>
</div>
<script crossorigin="anonymous" integrity="sha512-mIKH3M2bRlIyhG4tBEbJ8dn8t8JFlNJU2NXlJePgpQ72CK4jAYsZyCGFcASRGtPBbcAQhz67KTkA1Jw6Kizk9g==" src="https://lib.baomitu.com/layui/2.7.6/layui.js"></script>
<script>
  //JS
  layui.use(['element', 'layer', 'util'], function(){
    var element = layui.element
            ,layer = layui.layer
            ,util = layui.util
            ,$ = layui.$;

    //头部事件
    util.event('lay-header-event', {
      //左侧菜单事件
      menuLeft: function(othis){
        layer.msg('展开左侧菜单的操作', {icon: 0});
      }
      ,menuRight: function(){
        layer.open({
          type: 1
          ,content: '<div style="padding: 15px;">处理右侧面板的操作</div>'
          ,area: ['260px', '100%']
          ,offset: 'rt' //右上角
          ,anim: 5
          ,shadeClose: true
        });
      }
    });

  });
</script>
</body>
</html>

2.6add-order.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>订单添加</title>
    <link crossorigin="anonymous" integrity="sha512-SSF+OBDODWTSIqOivYBOyOKQ93PBDevipJEUEWtkUbTt4v34rmgPcCXcBMolxZIJcuobcdqmYJlonjUBEbOzNw==" href="https://lib.baomitu.com/layui/2.7.6/css/layui.css" rel="stylesheet">
</head>
<body>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
    <legend>订单添加</legend>
</fieldset>
<!--面板-->
<div class="layui-card">
    <div class="layui-card-body">
        <!--表单-->
        <form class="layui-form" action="">
            <div class="layui-form-item">
                <label class="layui-form-label">发货人</label>
                <div class="layui-input-block">
                    <input type="text" name="shipper" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">发货人地址</label>
                <div class="layui-input-block">
                    <input type="text" name="shipperAddress" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">发货人电话</label>
                <div class="layui-input-block">
                    <input type="text" name="shipperPhone" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">收货人</label>
                <div class="layui-input-block">
                    <input type="text" name="receiver" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">收货人地址</label>
                <div class="layui-input-block">
                    <input type="text" name="receiverAddress" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">收货人电话</label>
                <div class="layui-input-block">
                    <input type="text" name="receiverPhone" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <div class="layui-input-block">
                    <button class="layui-btn" lay-submit lay-filter="formDemo">提交</button>
                    <button type="reset" class="layui-btn layui-btn-primary">重置</button>
                </div>
            </div>
        </form>
    </div>
</div>

<script src="https://lib.baomitu.com/jquery/3.6.0/jquery.min.js"></script>
<script crossorigin="anonymous" integrity="sha512-mIKH3M2bRlIyhG4tBEbJ8dn8t8JFlNJU2NXlJePgpQ72CK4jAYsZyCGFcASRGtPBbcAQhz67KTkA1Jw6Kizk9g==" src="https://lib.baomitu.com/layui/2.7.6/layui.js"></script>
<script>
    layui.use('form',function(){
        var form=layui.form;
        form.on('submit(formDemo)',function(data){
            $.ajax({
                url:"/order/add",
                type:"POST",
                data:data.field,
                datatype:"JSON",
                success:function(result){
                    layer.msg(result);
                }
            });
            return false;
        });
    });
</script>
</body>
</html>

2.7add-logistics.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>物流添加</title>
    <link rel="stylesheet" href="//lib.baomitu.com/layui/2.6.4/css/layui.min.css">
</head>
<body>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
    <legend>物流添加</legend>
</fieldset>
<!-- 面板 -->
<div class="layui-card">
    <div class="layui-card-body">
        <!-- 表单 -->
        <form class="layui-form" action="">
            <div class="layui-form-item">
                <label class="layui-form-label">订单编号</label>
                <div class="layui-input-block">
                    <input type="text" name="orderId" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">操作名称</label>
                <div class="layui-input-block">
                    <select name="operation">
                        <option value="">请选择</option>
                        <option value="已取件">已取件</option>
                        <option value="运送中">运送中</option>
                        <option value="派送中">派送中</option>
                        <option value="已签收">已签收</option>
                    </select>
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">操作员</label>
                <div class="layui-input-block">
                    <input type="text" name="operator" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">操作员电话</label>
                <div class="layui-input-block">
                    <input type="text" name="phone" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">操作地址</label>
                <div class="layui-input-block">
                    <input type="text" name="address" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">详细信息</label>
                <div class="layui-input-block">
                    <input type="text" name="details" class="layui-input">
                </div>
            </div>

            <div class="layui-form-item">
                <div class="layui-input-block">
                    <button class="layui-btn" lay-submit lay-filter="formDemo">提交</button>
                    <button type="reset" class="layui-btn layui-btn-primary">重置</button>
                </div>
            </div>
        </form>
    </div>
</div>
<script src="//lib.baomitu.com/jquery/3.6.0/jquery.min.js"></script>
<script src="//lib.baomitu.com/layui/2.7.6/layui.min.js"></script>
<script>
    //Demo
    layui.use('form', function () {
        var form = layui.form;

        //监听提交
        form.on('submit(formDemo)', function (data) {
            $.ajax({
                url: "/order/update",
                type: "POST",
                data: data.field,
                dataType: "JSON",
                success: function (result) {
                    layer.msg(result);
                }
            });
            return false;
        });
    });
</script>
</body>
</html>

2.8order-manage.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>订单管理</title>
    <link rel="stylesheet" href="https://lib.baomitu.com/layui/2.7.6/css/layui.min.css">
</head>
<body>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
    <legend>订单管理</legend>
</fieldset>
<!-- 面板 -->
<div class="layui-card">
    <div class="layui-card-body">
        <label class="layui-form-label">订单编号</label>
        <div class="layui-input-inline">
            <input type="text" id="orderId" class="layui-input">
        </div>
        <button onclick="search();" class="layui-btn"><i class="layui-icon">&#xe615;</i></button>
    </div>
</div>

<div style="padding: 20px;margin-bottom: 100px;">
    <!-- 面板 -->
    <div class="layui-col-md12">
        <div class="layui-card">
            <div class="layui-card-header">订单信息</div>
            <div class="layui-card-body" id="order"></div>
        </div>
    </div>
    <!-- 面板 -->
    <div class="layui-col-md12">
        <div class="layui-card">
            <div class="layui-card-header">物流信息</div>
            <div class="layui-card-body">
                <!-- 时间线 -->
                <ul class="layui-timeline" id="logistics">
                    <!--
                    <li class="layui-timeline-item">
                      <i class="layui-icon layui-timeline-axis">&#xe63f;</i>
                      <div class="layui-timeline-content layui-text">
                        <div class="layui-timeline-title">过去</div>
                      </div>
                    </li>
                    -->
                </ul>
            </div>
        </div>
    </div>
    <div class="layui-col-md12">
        <!-- 面板 -->
        <div class="layui-card">
            <div class="layui-card-header">订单列表</div>
            <div class="layui-card-body">
                <!-- 数据表格 -->
                <table id="orderList" lay-filter="orderTable"></table>
            </div>
        </div>
    </div>
</div>
<!-- 头工具栏事件 筛选/导出/打印 -->
<script type="text/html" id="toolbarDemo"></script>
<!-- 行工具事件 -->
<script type="text/html" id="barDemo">
    <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>

<script src="https://lib.baomitu.com/jquery/3.6.0/jquery.min.js"></script>
<script src="https://lib.baomitu.com/layui/2.7.6/layui.min.js"></script>
<script>
    // 搜索
    function search() {
        // 订单编号
        var orderId = $("#orderId").val();
        $.ajax({
            url: "/order/" + orderId,
            type: "GET",
            dataType: "JSON",
            // 拼接处理返回结果
            success: function (order) {
                if (order == null || order == undefined || order == "") {
                    layer.msg("订单不存在");
                    return;
                }
                // 处理订单信息
                $("#order").append("订单编号:" + orderId + "(" + order["status"] + ")<hr/>")
                    .append("发货人:" + order["shipper"] + "<br/>")
                    .append("发货人地址:" + order["shipperAddress"] + "<br/>")
                    .append("发货人电话:" + order["shipperPhone"] + "<br/>")
                    .append("下单时间:" + order["orderTime"] + "<br/>")
                    .append("发货时间:" + order["shipTime"] + "<hr/>")
                    .append("收货人:" + order["receiver"] + "<br/>")
                    .append("收获人地址:" + order['receiverAddress'] + "<br/>")
                    .append("收获人手机:" + order["receiverPhone"]);
                // 获取物流信息
                let logistics = order['logistics'];
                // 倒序循环
                for (var i = logistics.length - 1; i >= 0; i--) {
                    // 处理物流信息
                    $("#logistics").append('<li class="layui-timeline-item">' +
                        '<i class="layui-icon layui-timeline-axis"></i>' +
                        '<div class="layui-timeline-content layui-text">' +
                        '<h3 class="layui-timeline-title">' +
                        '(' + logistics[i].operation + ')' +
                        logistics[i].operationTime + '</h3>' +
                        '<p>' + logistics[i].details + '</p>' +
                        '<p>操作员:' + logistics[i].operator + '&nbsp;' +
                        '操作员电话:' + logistics[i].phone + '&nbsp;' +
                        '操作地址:' + logistics[i].address + '</p></div></li>');
                }
            },
        });
    }

    // 数据表格
    layui.use('table', function () {
        var table = layui.table;

        //第一个实例
        table.render({
            elem: '#orderList',
            url: '/order/list', //数据接口
            page: true, //开启分页
            toolbar: '#toolbarDemo', // 头工具栏
            cols: [[ // 表头
                {field: 'id', title: '订单编号', sort: true, fixed: 'left'},
                {field: 'status', title: '订单状态'},
                {field: 'orderTime', title: '下单时间', sort: true},
                {field: 'shipper', title: '发货人'},
                {field: 'shipperAddress', title: '发货地址'},
                {field: 'shipperPhone', title: '发货人电话'},
                {field: 'receiver', title: '收货人', edit: 'text'},
                {field: 'receiverAddress', title: '收货地址'},
                {field: 'receiverPhone', title: '收货人电话'},
                {fixed: 'right', title: '操作', toolbar: '#barDemo'} // 行工具栏
            ]]
        });

        //工具条事件
        table.on('tool(orderTable)', function (obj) { //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
            var data = obj.data; //获得当前行数据
            var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
            var tr = obj.tr; //获得当前行 tr 的 DOM 对象(如果有的话)

            if (layEvent === 'detail') { //查看
                //do somehing
            } else if (layEvent === 'del') { //删除
                layer.confirm('真的删除行么', function (index) {
                    obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
                    layer.close(index);
                    //向服务端发送删除指令
                    $.ajax({
                        url: "/order/delete",
                        type: "POST",
                        data: {"id": data.id},
                        dataType: "JSON",
                        success: function (result) {
                            layer.msg(result);
                        }
                    });
                });
            } else if (layEvent === 'edit') { //编辑
                //do something

                //同步更新缓存对应的值
                obj.update({
                    username: '123'
                    , title: 'xxx'
                });
            } else if (layEvent === 'LAYTABLE_TIPS') {
                layer.alert('Hi,头部工具栏扩展的右侧图标。');
            }
        });
    });
</script>
</body>
</html>
文章暂时更新至此,后续将推出开发SpringBoot-MongoDB完整系统
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇