员工管理
- 全局异常处理器 用户名已存在
- 在拦截器里解析员工id,利用ThreadLocal放入线程局部变量中,从service里面取值 动态获取员工id
- 在WebMvcConfiguration中扩展Spring MVC消息转换器。 统一对日期类型进行格式化处理
端口占用问题
netstat -ano | findstr 8080
taskkill /pid 14188 /f
公共字段填充
文件上传
- 使用阿里云OSS服务,导入对应maven依赖
- 参数配置
- 定义配置类,用于创建AliOssUtil对象
菜品分页查询
- 表别名,字段别名
- 左外连接,连接条件
新增菜品
- 新增菜品和对应口味
删除菜品
- 是否存在起售中的菜品
- 是否被套餐关联了
- 删除菜品,删除对应口味
- 多个菜品id,SQL用in关键字
修改菜品
- 修改菜品
- 删除对应口味
- 插入新的口味
设置店铺营业状态
- 使用redis存储状态值
- 设置三个接口
- 管理端设置店铺营业状态,管理端查询店铺营业状态,用户端查询营业状态
微信登录
- 小程序获取code
- 服务端根据code,appid,appsecret获取openid
- 根据openid判断当前用户是否为新用户,不是完成注册,返回用户对象
- 根据密钥,有效时间,返回对象生成token
商品浏览功能
缓存菜品,缓存套餐
- Redis使用注解实现缓存 spring cache
- Redis使用RedisTemplate方式实现
地址簿功能
用户下单
- 地址簿为空、购物车数据为空
- 向订单表插入1条数据,向订单明细表插入n条数据
- 清空当前用户的购物车数据
小程序接入微信支付
订单状态定时处理
- 支付超时的订单
- 派送中的订单一直不点击完成
- Spring Task cron表达式,定义任务触发时间
来单提醒,客户催单
- 支付成功,微信调用支付成功的回调
- 读取微信传过来的数据并解密
- 修改订单状态,做来电提醒
//通过websocket向客户端浏览器推送消息 type orderId content
Map map = new HashMap();
map.put("type",1); // 1表示来单提醒 2表示客户催单
map.put("orderId",ordersDB.getId());
map.put("content","订单号:" + outTradeNo);
String json = JSON.toJSONString(map);
webSocketServer.sendToAllClient(json);
- 客户催单:查看订单是否存在,通过websocket向客户端浏览器推送消息
数据统计
- Apache Echarts
- 营业额统计
- 用户统计
- 订单统计
- 销量排行Top10
- 工作台
- Apache POI