You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jdsdk/mq/mq.go

284 lines
11 KiB

2 years ago
package mq
import (
"git.oa00.com/go/jdsdk/request"
"strconv"
)
const (
skuChange = "sku_change"
skuPriceChange = "sku_price_change"
orderCreate = "order_create"
orderPay = "order_pay"
orderStockOut = "order_stockout"
orderDelivered = "order_delivered"
orderFinish = "order_finish"
orderCancel = "order_cancel"
orderRefund = "order_refund"
afsCreate = "afs_create"
afsStepResult = "afs_step_result"
balanceEarlyWarning = "order_balance_not_enough"
AckSuccess = "SUCCESS"
AckFailed = "CONSUME_FAILED"
AckRESEND = "RESEND"
AckDISCARD = "DISCARD"
SkuTypeDelete = 0 // 删除
SkuTypeAdd = 1 // 新增
SkuTypeEdit = 2 // 修改
SkuTypeRecovery = 3 // 删除恢复
OrderModelNormal = 1 // 正常订单
OrderModelAfter = 2 // 售后订单
OrderCancelStatusSuccess = 1 // 取消成功
OrderCancelStatusFail = 2 // 取消失败
OrderCancelStatusApply = 3 // 申请取消
OrderCancelStatusReject = 4 // 申请拒收
)
type Mq struct {
}
type MessageSku struct {
Type int `json:"type"` // 0=删除 1=新增 2=修改 3=删除
SkuId uint64 `json:"skuId"`
Timestamp int64 `json:"timestamp"`
}
// SkuChange @Title sku变动
func (m *Mq) SkuChange(handler func(message request.Message)) {
run(skuChange, handler)
}
// SkuPriceChange @Title sku价格变动
func (m *Mq) SkuPriceChange(handler func(message request.Message)) {
run(skuPriceChange, handler)
}
type OrderCreate struct {
OrderId uint64 `json:"orderId"` // 订单号
DParentOrderId uint64 `json:"dParentOrderId"` // 父订单号
AutoCancelSeconds string `json:"autoCancelSeconds"` // 订单自动取消时间 秒数
Yn uint `json:"yn"` // 是否有效 1=有效 0=无效
CreateTime string `json:"createTime"` // 订单创建时间 Y/m/d H:i
TotalFee float64 `json:"totalFee"` // 总金额 包含运费
FreightFee string `json:"freightFee"` // 运费
Timestamp int64 `json:"timestamp"` // 请求时间
SkuList []OrderSkuItem `json:"skuList"` // sku列表
ChannelOrderId string `json:"channelOrderId"` // 渠道订单号
RootOrderId uint64 `json:"rootOrderId"` // 顶级订单号
OrderModel int `json:"orderModel"` // 订单模式 1=正常订单 2=售后订单
DiscountFee float64 `json:"discountFee"` // 优惠金额
AfsOrderInfo OrderAfsItem `json:"afsOrderInfo"` // 售后单信息
}
type OrderAfsItem struct {
OrderId uint64 `json:"orderId"` // 售后订单号
ParentOrderId uint64 `json:"parentOrderId"` // 售后父订单号
ServiceId uint64 `json:"serviceId"` // 售后单号
}
type OrderSkuItem struct {
SkuId uint64 `json:"skuId"` // skuId
SkuName string `json:"skuName"` // 商品名称
Quantity int `json:"quantity"` // 数量
Price float64 `json:"price"` // 单价
SkuType int `json:"skuType"` // 商品类型 1=主品 2=赠品
MainSkuId uint64 `json:"mainSkuId"` // 赠品对应主品skuId
}
// OrderCreate @Title 订单创建
func (m *Mq) OrderCreate(handler func(message request.Message)) {
run(orderCreate, handler)
}
type OrderPay struct {
OrderId uint64 `json:"orderId"` // 订单号
PayTime string `json:"payTime"` // 支付时间
RealPayFee float64 `json:"realPayFee"` // 实际支付金额
Timestamp int64 `json:"timestamp"` // 时间戳
ChannelOrderId string `json:"channelOrderId"` // 渠道单号
DParentOrderId uint64 `json:"dParentOrderId"` // 父订单号
RootOrderId uint64 `json:"rootOrderId"` // 顶级订单号
}
// OrderPay @Title 订单支付
func (m *Mq) OrderPay(handler func(message request.Message)) {
run(orderPay, handler)
}
type OrderStockOut struct {
OrderId uint64 `json:"orderId"` // 订单号
Packages []Package `json:"packages"` // 包裹
Timestamp int64 `json:"timestamp"` // 时间戳
ChannelOrderId string `json:"channelOrderId"` // 渠道单号
DParentOrderId uint64 `json:"dParentOrderId"` // 父订单号
RootOrderId uint64 `json:"rootOrderId"` // 顶级订单号
}
type Package struct {
OutboundTime string `json:"outboundTime"` // 出库时间
LogisticsCode string `json:"logisticsCode"` // 物流编码
LogisticsName string `json:"logisticsName"` // 物流名称
WaybillCode string `json:"waybillCode"` // 运单号
OutLogisticsCode string `json:"outLogisticsCode"` // 物流外部编码
SkuList []PackageSku `json:"skuList"` // sku列表
}
type PackageSku struct {
SkuId string `json:"skuId"` // skuId
SkuName string `json:"skuName"` // 名称
Quantity uint `json:"quantity"` // 数量
}
// GetSkuIdUint64 @Title 获取uint64
func (p *PackageSku) GetSkuIdUint64() uint64 {
skuId, _ := strconv.ParseUint(p.SkuId, 10, 64)
return skuId
}
// OrderStockOut @Title 订单出库
func (m *Mq) OrderStockOut(handler func(message request.Message)) {
run(orderStockOut, handler)
}
type OrderDelivered struct {
OrderId uint64 `json:"orderId"` // 订单号
OpeTime string `json:"opeTime"` // 妥投时间 Y/m/d H:i
Timestamp int64 `json:"timestamp"` // 时间戳
ChannelOrderId string `json:"channelOrderId"` // 渠道单号
DParentOrderId uint64 `json:"dParentOrderId"` // 父订单号
RootOrderId uint64 `json:"rootOrderId"` // 顶级订单号
}
// OrderDelivered @Title 订单妥投
func (m *Mq) OrderDelivered(handler func(message request.Message)) {
run(orderDelivered, handler)
}
type OrderFinish struct {
OrderId uint64 `json:"orderId"` // 订单号
FinishedTime string `json:"finishedTime"` // 完成时间 Y/m/d H:i
Timestamp int64 `json:"timestamp"` // 时间戳
ChannelOrderId string `json:"channelOrderId"` // 渠道单号
DParentOrderId uint64 `json:"dParentOrderId"` // 父订单号
RootOrderId uint64 `json:"rootOrderId"` // 顶级订单号
}
// OrderFinish @Title 订单完成
func (m *Mq) OrderFinish(handler func(message request.Message)) {
run(orderFinish, handler)
}
type OrderCancel struct {
OrderId uint64 `json:"orderId"` // 订单号
CreateTime string `json:"createTime"` // 取消成功时间 Y/m/d H:i
CancelStatus uint `json:"cancelStatus"` // 取消状态 1=取消成功 2=取消失败 3=申请取消 4=申请拒收
ExtendInfo string `json:"extendInfo"` // 拓展字段
Timestamp int64 `json:"timestamp"` // 时间戳
ChannelOrderId string `json:"channelOrderId"` // 渠道单号
DParentOrderId uint64 `json:"dParentOrderId"` // 父订单号
RootOrderId uint64 `json:"rootOrderId"` // 顶级订单号
RootOrderStatus uint `json:"rootOrderStatus"` // 订单取消前的状态 0=已代扣 1=未代扣
}
// OrderCancel @Title 订单取消
func (m *Mq) OrderCancel(handler func(message request.Message)) {
run(orderCancel, handler)
}
type OrderRefund struct {
OrderId uint64 `json:"orderId"` // 订单号
RefundTime string `json:"refundTime"` // 退款时间 无效
ServiceNumber string `json:"service_number"` // 京东服务单号
SkuList []PackageSku `json:"skuList"` // sku列表
RefundType uint `json:"refundType"` // 退款类型 1=售后退款 2=取消退款 3=多支付退款 4=余额提现 5=整单二次退款
RefundFee float64 `json:"refundFee"` // 退款金额
RefundId string `json:"refundId"` // 退款编码
Timestamp int64 `json:"timestamp"` // 时间戳
ChannelOrderId string `json:"channelOrderId"` // 渠道单号
DParentOrderId uint64 `json:"dParentOrderId"` // 父订单号
RootOrderId uint64 `json:"rootOrderId"` // 顶级订单号
}
// OrderRefund @Title 退款成功
func (m *Mq) OrderRefund(handler func(message request.Message)) {
run(orderRefund, handler)
}
type AfsCreate struct {
OrderId uint64 `json:"orderId"` // 订单号
AfsApplyTime int64 `json:"afsApplyTime"` // 售后申请时间 Y/m/d H:i
ChannelAfsApplyId string `json:"channelAfsApplyId"` // 渠道售后单号
AfsServiceId uint64 `json:"afsServiceId"` // 京东收好单号
SkuId uint64 `json:"skuId"` // skuId
SkuName string `json:"skuName"` // 商品名称
AfsType uint `json:"afsType"` // 售后类型 10=退货 20=换货
AfsApplyId uint64 `json:"afsApplyId"` // 售后申请单号
Timestamp int64 `json:"timestamp"` // 时间戳
ChannelOrderId string `json:"channelOrderId"` // 渠道单号
}
// AfsCreate @Title 售后创建
func (m *Mq) AfsCreate(handler func(message request.Message)) {
run(afsCreate, handler)
}
type AfsStepResult struct {
OrderId uint64 `json:"orderId"` // 订单号
AfsServiceId uint64 `json:"afsServiceId"` // 京东售后单号
AfsResultType string `json:"afsResultType"` // 京东售后单号
// 售后状态 APPLY=创建售后 AUDIT_FAIL=审核驳回 CANCEL=审核取消 COMPENSATE_BALANCE=直赔余额 OA_COMPENSATION=直赔商品 PICKWARE_SEND=客户发货
// POP_REISSUE=POP补发商品 REFUND_NO_RETURN=退款不退货 OA_COMPENSATION_NEWORDER=直赔商品生成新订单
// AFS_RECV_PRODUCT=收到商品 OA_REWORK=返修换新 RETURN=原反 RETURN_CANCEL=原反取消 FORCECOMPLETE=强制关单
// OA_REWORK_NEWORDER=换修换新生成新订单 POP_UNDERLINENEWORDER=pop线下换新 REFUND_APPLY=退款申请 CUSTOMER_CONFIRM=待用户确认
// REFUND=退款 CUSTOMER_COMPLETE=用户已解决
SkuId uint64 `json:"skuId"` // skuId
SkuName string `json:"skuName"` // 商品名称
AfsType uint `json:"afsType"` // 售后类型 10=退货 20=换货
StepType string `json:"stepType"` // 处理环节 APPLY=申请 AUDIT=审核 RECEIVED=收货 PROCESS=处理 CONFIRM=确认 COMPLETE=用户已解决
OperationDate string `json:"operationDate"` // 操作时间 Y-m-d H:i:s
Timestamp int64 `json:"timestamp"` // 时间戳
}
// AfsStepResult @Title 售后处理
func (m *Mq) AfsStepResult(handler func(message request.Message)) {
run(afsStepResult, handler)
}
type BalanceEarlyWarning struct {
CustomerNum string `json:"customerNum"` // 钱包号
Msg string `json:"msg"` // 不足提示
}
// BalanceEarlyWarning @Title 余额预警
func (m *Mq) BalanceEarlyWarning(handler func(message request.Message)) {
run(balanceEarlyWarning, handler)
}
type ack struct {
action string
}
func (a *ack) Ack() {
}
// @Title 调用请求
func run(action string, handler func(message request.Message)) {
defer func() {
if err := recover(); err != nil {
run(action, handler)
}
}()
for true {
mq, err := request.ExecMq(action)
if err != nil {
continue
}
if len(mq.Messages) == 0 {
continue
}
handler(mq)
}
}