宠物店端(以下称productor):
后台基本功能已经完成,已经实现的功能包括
-
登录注册
-
商品信息的发布修改删除
-
从队列拉取订单,分条件查询订单
普通用户端(以下称consumer):
后台基本功能已经完成,已经实现的功能包括
- 用户登录注册
- 好友的添加,动态消息的发布查看和评论
- 订单的发起
productor:
登录注册页面完成,且已经与后台接口做好了对接(3-27)
主页面布局完成但未完成与后台接口的对接,包括四个子页面,分别是:
- 库存页面,用于查看管理已经发布的销售信息(3-30)
- 聊天页面,用于与顾客进行聊天【聊天具体实现后台未完成】(3-30)
- 订单页面,用于查看管理订单(3-30)
- 信息页面,宠物店主的信息的查看修改(3-30)
consumer:
- 登录注册页面完成,且已经与后台接口做好了对接(3-26)
- 地图的展现,地图已经能在APP中展现(3-28)
- 聊天消息界面&好友动态界面&个人资料界面&好友列表界面(3-31)
下周计划(4-1至4-7):
- 完成异步文件上传功能【拟用FormData进行实现,但是好像出了点问题,准备改用jquery.form实现】(4-1至4-2)
- consumer端的前后台对接(4-3至4-7)
文件上传功能:
- 上传功能已经完成,可以通过AJAX这种异步方式进行上传文件,从而不需要刷新页面,提高用户体验(4-1)
consumer:
- 用户信息数据的页面渲染和修改,包括头像的上传与及时生效,基本信息的修改(4-2至4-3)
- 用户动态分享信息的发布和渲染页面(4-5)
- 用户动态信息的评论的发布获取,以及层次的进行展示(4-6)
productor:
- 商家信息数据的页面渲染和修改,包括头像的上传与及时生效,基本信息的修改(4-7)
下周计划(4-8至4-14):
- 商家销售信息的发布,普通客户的获取(根据地图api)
- 普通客户指定销售信息,发起订单,商家接单
consumer:
- 用户可以根据自身地理位置信息获取附件商家的信息,以信息窗口的形式展现,信息窗口demo(腾讯官方)(4-11)
- 用户能够正常浏览销售信息并发起订单(4-13)
productor:
- 发布销售信息,并携带自身地理位置信息,同时增加商家自定义位置信息(4-9至4-10)
- 商家能够接收到订单(4-13至4-14)
Appendix:
- 用户端获取销售信息过程如下
//inputs
double latitude; //纬度
double longitude; //经度
double accurate; //精确程度,默认值为0.5,用于进行地理位置范围确定
int size; //获取商家的最大数
//查询过程
//1.先根据地理范围确定附件商家列表
SELECT id
FROM shopkeeper
WHERE latitude BETWEEN latitude-accurate AND latitude+accurate
AND longitude BETWEEN longitude-accurate AND longitude+accurate
limit size;
//2.根据商家列表,获取每个商家最近发布的信息
SELECT column1,column2,column3,...
FROM shock
WHERE shock.shopkeeperId IN (?,?,?,...)
GROUP BY shock.shopkeeperId
ORDER BY shock.timestamp DESC //降序,时间戳越大表示是越新的
Limit 1;
//打包数据,封装成json格式
{
"size": 5,
"accurate": 0.5,
"latitude": 39.092,
"longitude": 117.39811,
"shocks": [
{
"shopkeeperId": "AWn2zZXXTHjYzWcv3v45",
"shopkeeperLogo": "AWn23MI6THjYzWcv3v5M",
"shopkeeperName": "Hello Doge",
"shock": {
"id": "AWoVzkiFUJOR1j7HV_RI",
"resources": [
"AWoVzjFUUJOR1j7HV_RG",
"AWoVzjIBUJOR1j7HV_RH"
],
"title": "123库存标题1123456456",
"text": " 来点文字描述吧.\n ",
"shopkeeperId": "AWn2zZXXTHjYzWcv3v45",
"amount": 0,
"last": 9,
"price": 11,
"timestamp": 0
},
"latitude": 39.09204,
"longitude": 117.09811
}
]
}
- 序列化对象需要注意的问题(踩坑记)
//由于是两个系统之间使用消息队列进行传输,必然要将订单实体对象进行序列化操作
//但是由于两个系统的订单实体对象使用的包名不同,因此需要在反序列化时进行包名处理
public class OrderObjectInputStream extends ObjectInputStream {
protected OrderObjectInputStream() throws IOException, SecurityException {
super();
}
public OrderObjectInputStream(InputStream arg0) throws IOException {
super(arg0);
}
protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException{
String name = desc.getName();
try {
if(name.startsWith("indi.pet.consumer"))
name = name.replace("consumer", "producer");//包名转换
return Class.forName(name);
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
return super.resolveClass(desc);
}
}
//同时需要注意,两个系统下的实体序列化id必须一致!!!!
public class Order implements Serializable {
private static final long serialVersionUID = 123456L;
3.发送订单&接收订单截图
下周计划任务(4-15至4-21)
- 利用WebSocket技术进行商家实时接单,并且用户和商家可以进行聊天互动
- 订单完整运行流程,从发起到结束
consumer&productor:
- 支持实时接收订单状态(利用websocket)
- 完整订单流程运行 : 发起->接单->拣货->拣货完成->用户确认取货->商家确认完成
完整订单流程图: 用户订单发起&商家接收订单: 商家接单&用户提醒 商家拣货&用户提醒 订单完成
本周未完成:
- 商家和用户之间聊天功能(可能需要单独的一套聊天系统)
下周计划任务(4-22至4-26)
- 搭建聊天系统
项目结算
项目已经全部完成,github上代码结构如下
.
├── _document # 产品说明书
├── _images # 存放README.md文档支持的图片
├── _indi-pet-chatting # 聊天系统工程文件
| ├── _src # 聊天系统源代码
| | ├── _main # 主程序代码
| | | ├── _java # 源代码 java版本
| | | └── _resources # 配置文件存放位置
| | | └── application.properties # 主配置文件
| | └── _test # 测试程序主代码
| └── pom.xml # 聊天系统项目构建文件,依赖...
├── _indi-pet-consumer # 用户模块工程文件
| ├── _src # 用户模块源代码
| | ├── _main # 主程序代码
| | | ├── _java # 源代码 java版本
| | | └── _resources # 配置文件存放位置
| | | └── application.properties # 主配置文件
| | └── _test # 测试程序主代码
| └── pom.xml # 用户模块项目构建文件,依赖...
├── _indi-pet-producer # 商家模块工程文件
| ├── _src # 商家模块源代码
| | ├── _main # 主程序代码
| | | ├── _java # 源代码 java版本
| | | └── _resources # 配置文件存放位置
| | | └── application.properties # 主配置文件
| | └── _test # 测试程序主代码
| └── pom.xml # 商家模块项目构建文件,依赖...
├── _petshop # 最终程序工程文件
| ├── _petshop-chatting # 聊天模块
| └── _petshop-consumer # 用户模块
| └── _petshop-producer # 商家模块
| └── _src # 商家模块源代码
| ├── _main # 主程序代码
| | ├── _java # 源代码 java版本
| | └── _resources # 配置文件存放位置
| | └── application.properties # 主配置文件
| └── _test # 测试程序主代码
| └── build.gradle # 项目构建文件,依赖...
| └── settings.gradle # 项目设置
├── _web # 前度代码
| ├── _consumer # 用户前端页面
| └── _www # 主页面代码
| └── _productor # 商家前端页面
| └── _www # 主页面代码
| └── _test # 测试用
├── _pet_shop_backup # Elasticsearch备份文件
└── README.md # 说明文档