你好

2024-05-02

在这里简单整理一下以前的内容,方便可以到处查看,如果你碰巧进来了,欢迎留下你的脚印

mall

商品查看,购物车,下单,支付,退款

shop

基础信息,营业状态

market

拼团,满赠,免费零商品

privilege

给用户发放生日奖励,通过分析用户消费,充值数据给用户发放对应奖励,并通过微信推送订阅消息。员工端查看营销数据

urlcenter

链接中心,相册,下载

kds

实现餐厅厨房系统,包含1客房下单 2厨房kds系统显示订单,播报提醒 3厨师制作,出餐 4通知服务员取餐 5送达客户

im

基于第三方socket实现服务器主动推送消息,实现以下功能:播报系统,通知前端刷新页面,推送消息

kds

整体思路:

1客房下单 2厨房kds系统展示订单,播报提醒 3厨师制作,出餐 4通知服务员取餐 5送达客户

订单表:catering_order

订单商品表:catering_order_goods 

下单
1:同一个客人前后下单,在同一个订单内

2:排序号每天3点重置   格式#01

3:推送im通知。pad订单推送后厨,叫号屏。手牌订单推送收银台



说明:主要依据catering_order_goods 表 流转状态,查询数据等

主要操作

开始制作 :
已取消商品无法开始制作

已制作 幂等

制作完成
只有正在制作的商品才可以操作制作完成

通知取餐 
包含两个方面

1流转订单状态(已通知的可再次通知,保证幂等)

2推送im通知(后续->通过数店通知服务员)

取餐完成 
制作完成的才可以取餐

未通知也可以取餐

取消订单 
包含两个方面

1流转订单状态(只有未开始制作的才可以取消)

2推送取消事件(当前需求,只刷新后厨展示,不播报)

清洁房间
流转订单已完成

付费中心-短信

注:目前只支持前付费

购买短信套餐包
下单购买成功后之后会回调,

1、短信账户余额表, 增加余额

2、套餐包队列表, 入队列新套餐记录

3、每日定时过期套餐包

扣费大致流程

https://s2.loli.net/2024/08/02/NmBVx3QHW4DXu2a.png

扣费
1、costcenter-rpc(SmsSendPrePay)冻结短信条数

生成一个订单号,

冻结短信条数,

返回单号,可根据单号查询冻结信息

2、costcenter-rpc(SmsSendPay)扣费

释放冻结短信条数,

判断余额是否足够,

事务里扣余额表、套餐包队列。扣费成功,

写入短信支付记录表。

3、costcenter-rpc(SmsReleaseFreezeNum)取消冻结

写入取消冻结队列,队列消费,消费失败重新写入一条取消冻结记录

发送结果
1、costcenter-rpc(SmsSendStatusCallBack)发送

成功则修改状态为发送成功

失败则退款,修改状态为发送失败



2、costcenter-rpc(SmsReceiptStatusCallBack)回执

写入回执队列,队列消费,消费失败重新写入待回执列表(重试机制,确保成功)



发送短信
1、sms-rpc:先冻结短信条数->写入发送记录表->把记录id写入待发送队列(冻结短信之后,如果有错误就调用取消冻结)。

不同品牌写入不同队列,品牌id作为队列key的一部分,每个品牌的短信发送隔离

短信类型也作为队列key的一部分,验证码,营销,通知短信隔离

2、sms-rmq:每个品牌每个类型启用一个消费者,Consume自己的待发送队列->调用SmsSendPay扣费->调用短信服务发送短信->SmsSendStatusCallBack上报发送结果->回写短信记录表


注:单条短信和多条短信的发送逻辑不一样,

单条写入单条发送的队列,调用短信服务发送单条的接口

多条写入多条发送的队列,调用短信服务发送多条的接口

创蓝回调
1、写入redis队列待消费,为了保证速度,使用rand.Intn()

2、SmsSendStatusCallBack上报回执结果

3、修改发送日志表状态

im

整体思路

一台设备对应一个im账号,设备切房间之类操作时,修改设备位置信息

收银台为一个门店均为同一个im账号

推送im消息流程:

1、业务方调用messagecenter-rpc (SendImCall)

int64 brandId                             = 1;  // 品牌id
EnumImCallEvent event                     = 2;  // 事件类型
repeated EnumImCallChannel Channels       = 3;  // 发送渠道
map<string, string> callParams            = 4;  // 参数map 详细内容,请看内容
int64 shopId                              = 5;  // 门店id
repeated DesignatedAccount designatedList = 6;  // 是否指定账号
EnumImCallMsgType MsgType                 = 7;  // 消息类型 1播报 2刷新 3通知 4pad呼叫
int64 msgTemplateId                       = 8;  // 模板id MsgType=4时需要

2、messagecenter-rpc将要推送内容写表,并写入延时队列

说明:查询播报配置,判断是否需要发送

推往多个端会写入多条记录,需要多次推送的也写入多条记录(例如:间隔播报多次)

3、messagecenter-rmq消费延时队列,组装发送内容,调用txim-rpc推送im消息

说明:发送前做一些校验,例如检查 端是否需要播报,技师是否已下钟等

{roomName}房间下单了{goodsName}{num}份,请注意
参数替换,拼出消息内容,

801房间下单了水饺2份,请注意