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.
284 lines
11 KiB
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)
|
||
|
}
|
||
|
}
|