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) } }