这个作业属于哪个课程 | 课程 |
---|---|
这个作业要求在哪里 | 作业要求 |
这个作业的目标 | 记录alpha冲刺Day3 |
团队名称 | 指导组 |
团队置顶集合随笔链接 | 指导组–alpha冲刺随笔置顶 |
其他参考文献 |
会议照片
项目燃尽图
项目运行图片
后台博客管理界面大体框架
团队成员站立式会议总结
成员 | 项目进展 | 存在/遇到的问题 | 从今天到明天会议的安排 | 心得体会 |
---|---|---|---|---|
072103402-卢成熙 | 商铺展示完成,并且简单完成了商家添加优惠券功能 | 有时候会出现数据库和缓存的数据不一致 | 今天商铺展示的完成,商家优惠券系统大概有雏形,明天希望能完成到抢购优惠券的功能 | 比较简单,就是知识点比较多,有时候需要去网上进行查询,但是这个知识是很重要的,更贴近企业实际开发,很有收获 |
102101117-刘建鑫 | 完成了用户端前段界面子界面一的初步编写 | 后端未完成,登录界面的接口暂不确定 | 进一步美化和完善登录界面 | 学会了编写一个登录页面感觉自己成长了很多 |
102101427-陈永裕 | 完成了管理员端前端界面子界面一的大体框架 | 各部分的交互困难 | 寻找解决交互问题的方法 | 更加输入了解前后端数据交互 |
102101413-王润富 | 完成管理员端前端界面子界面三的大体框架 | 白边问题难以解决 | 查找一些解决白边问题的范例 | 对用vue编写前端更加熟练 |
102101128-陈林旭 | 完成管理员端前端界面子界面二的部分框架 | 仍然对页面编写不够熟练,效率略低 | 继续加强学习并编写管理员端前端页面 | 在不断地学习中感觉自身充满了成就感 |
102101133-纳世荣 | 完成管理员端前端新ui界面的部分框架 | 新UI设计实现难度更高 | 实现新UI设计界面 | 前端界面代码实现更加熟练 |
291800137-赵鑫 | 完善了用户端后端的数据库的搭建 | 实体和关系繁多,构建数据库复杂 | 梳理数据库关系,完善数据库结构并继续进行编写 | 在思考过程中感觉自己的逻辑思维能力得到了很大的锻炼 |
102101134-范智强 | 完成了用户端前段界面子界面三的大体框架 | 初期未能与后端进行数据传递,页面空缺较多 | 预留空间,并简单设计后期数据样式,继续编写 | 在一次又一次的实操中对自己的技术越来越有自信 |
102101137-林鹏 | 完成了用户端前段界面子界面五的大体框架 | 用户端页面按钮众多,逻辑复杂 | 理清按钮间的逻辑关系,然后进行编写 | 对前端编写有了进一步的提升 |
031802441-张志敏 | 完成管理员端前端界面子界面四的大体框架 | 对各组件排版有困难 | 学习并解决各组件排版问题 | 感觉在冲刺过程中自己的编程技术得到了很大的提升 |
代码迁入
后端商铺查询功能
@Override
public Result queryById(Long id) throws InterruptedException {
// 解决缓存穿透
Shop shop = queryWithPassThrough(id);
if (shop == null) {
return Result.fail("店铺不存在!");
}
// 7.返回
return Result.ok(shop);
}
public Shop queryWithPassThrough(Long id) {
String key = RedisConstants.CACHE_SHOP_KEY + id;
String json = stringRedisTemplate.opsForValue().get(key);
if(StrUtil.isNotBlank(json)) {
return JSONUtil.toBean(json, Shop.class);
}
if(json != null) { //说明已经存了空值
return null;
}
Shop shop = getById(id);
if (shop == null) { //如果数据库没有这个数据就缓存空值
stringRedisTemplate.opsForValue().set(key, "", RedisConstants.CACHE_SHOP_TTL,TimeUnit.MINUTES);
return null;
}
stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop), RedisConstants.CACHE_SHOP_TTL,TimeUnit.MINUTES);
return shop;
}
后端商家添加优惠券功能
@Override
@Transactional
public void addSeckillVoucher(Voucher voucher) {
// 保存优惠券
save(voucher);
// 保存秒杀信息
Coupon seckillVoucher = new Coupon();
seckillVoucher.setVoucherId(voucher.getId());
seckillVoucher.setStock(voucher.getStock());
seckillVoucher.setBeginTime(voucher.getBeginTime());
seckillVoucher.setEndTime(voucher.getEndTime());
seckillVoucherService.save(seckillVoucher);
// 保存秒杀库存到Redis中
stringRedisTemplate.opsForValue().set(RedisConstants.SECKILL_STOCK_KEY + voucher.getId(), voucher.getStock().toString());
}
前端博客管理界面大体框架
<template>
<div style="height: 100%">
<el-container style="height: 100%">
<el-aside
width="200px"
style="background-color: rgb(238, 241, 246); height: 100%"
>
<el-menu
:default-openeds="['1', '3']"
style="height: 100%"
background-color="rgb(0,21,41)"
text-color="#fff"
>
<div
style="
height: 60px;
line-height: 60px;
text-align: center;
background: #002140;
color: white;
"
>
<b>点评系统后台</b>
</div>
<el-submenu index="0">
<template slot="title"
><i class="el-icon-house"></i>系统首页</template
>
</el-submenu>
<!--博客管理栏-->
<el-submenu index="1">
<template slot="title"
><i class="el-icon-message"></i>博客管理</template
>
<el-menu-item-group>
<template slot="title">分组一</template>
<el-menu-item index="1-1">选项1</el-menu-item>
<el-menu-item index="1-2">选项2</el-menu-item>
</el-menu-item-group>
<el-menu-item-group title="分组2">
<el-menu-item index="1-3">选项3</el-menu-item>
</el-menu-item-group>
<el-submenu index="1-4">
<template slot="title">选项4</template>
<el-menu-item index="1-4-1">选项4-1</el-menu-item>
</el-submenu>
</el-submenu>
<!--优惠券管理栏-->
<el-submenu index="2">
<template slot="title"
><i class="el-icon-menu"></i>优惠券管理</template
>
<el-menu-item-group>
<template slot="title">分组一</template>
<el-menu-item index="2-1">选项1</el-menu-item>
<el-menu-item index="2-2">选项2</el-menu-item>
</el-menu-item-group>
<el-menu-item-group title="分组2">
<el-menu-item index="2-3">选项3</el-menu-item>
</el-menu-item-group>
<el-submenu index="2-4">
<template slot="title">选项4</template>
<el-menu-item index="2-4-1">选项4-1</el-menu-item>
</el-submenu>
</el-submenu>
<!--数据统计栏-->
<el-submenu index="3">
<template slot="title"
><i class="el-icon-setting"></i>数据统计</template
>
<el-menu-item-group>
<template slot="title">分组一</template>
<el-menu-item index="3-1">选项1</el-menu-item>
<el-menu-item index="3-2">选项2</el-menu-item>
</el-menu-item-group>
<el-menu-item-group title="分组2">
<el-menu-item index="3-3">选项3</el-menu-item>
</el-menu-item-group>
<el-submenu index="3-4">
<template slot="title">选项4</template>
<el-menu-item index="3-4-1">选项4-1</el-menu-item>
</el-submenu>
</el-submenu>
</el-menu>
</el-aside>
<!--页眉头部-->
<el-container>
<el-header
style="
text-align: right;
font-size: 12px;
border-bottom: 1px solid #ccc;
line-height: 60px;
display: flex;
"
>
<div style="flex: 1; font-size: 18px">
<span style="cursor: pointer">666</span>
</div>
<el-dropdown style="width: 200px">
<i class="el-icon-caret-bottom" style="margin-right: 15px"></i>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>查看</el-dropdown-item>
<el-dropdown-item>新增</el-dropdown-item>
<el-dropdown-item>删除</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<span>欢迎您,超级管理员</span>
</el-header>
<!--时间选择,博客名称-->
<div>
<span>添加时间</span>
<el-date-picker
v-model="value2"
type="datetime"
placeholder="选择日期时间"
align="right"
:picker-options="pickerOptions"
>
</el-date-picker>
<el-button type="primary" icon="el-icon-search">查询</el-button>
</div>
<!--表格内容-->
<el-main>
<el-table
ref="multipleTable"
:data="tableData"
tooltip-effect="dark"
border
style="width: 100%"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55"> </el-table-column>
<el-table-column fixed prop="date" label="博客编号" width="150">
</el-table-column>
<el-table-column prop="name" label="博客名称" width="300">
</el-table-column>
<el-table-column prop="province" label="用户id" width="120">
</el-table-column>
<el-table-column prop="city" label="评论数量" width="120">
</el-table-column>
<el-table-column prop="address" label="添加时间" width="300">
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button
size="mini"
@click="handleEdit(scope.$index, scope.row)"
>编辑</el-button
>
<el-button
size="mini"
type="danger"
@click="handleDelete(scope.$index, scope.row)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<!--页码选择-->
<div style="margin-top: 20px">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage4"
:page-sizes="[100, 200, 300, 400]"
:page-size="100"
layout="total, sizes, prev, pager, next, jumper"
:total="1000"
>
</el-pagination>
</div>
</el-main>
</el-container>
</el-container>
</div>
</template>