diff --git a/business/jxcallback/orderman/order_afs.go b/business/jxcallback/orderman/order_afs.go new file mode 100644 index 000000000..2e37b28ec --- /dev/null +++ b/business/jxcallback/orderman/order_afs.go @@ -0,0 +1,262 @@ +package orderman + +import ( + "fmt" + + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/business/model/dao" + "git.rosy.net.cn/jx-callback/globals" +) + +func (c *OrderManager) LoadAfsOrder(vendorAfsOrderID string, vendorID int) (afsOrder *model.AfsOrder, err error) { + return c.loadAfsOrder(dao.GetDB(), vendorAfsOrderID, vendorID) +} + +func (c *OrderManager) loadAfsOrder(db *dao.DaoDB, vendorAfsOrderID string, vendorID int) (afsOrder *model.AfsOrder, err error) { + afsOrder = &model.AfsOrder{ + AfsOrderID: vendorAfsOrderID, + VendorID: vendorID, + } + err = dao.GetEntity(db, afsOrder, "AfsOrderID", "VendorID") + return afsOrder, err +} + +func (c *OrderManager) OnAfsOrderAdjust(afsOrder *model.AfsOrder, orderStatus *model.OrderStatus) (err error) { + return c.onAfsOrderNew(afsOrder, orderStatus, true) +} + +func (c *OrderManager) OnAfsOrderNew(afsOrder *model.AfsOrder, orderStatus *model.OrderStatus) (err error) { + return c.onAfsOrderNew(afsOrder, orderStatus, false) +} + +func (c *OrderManager) onAfsOrderNew(afsOrder *model.AfsOrder, orderStatus *model.OrderStatus, isAdjust bool) (err error) { + db := dao.GetDB() + dao.Begin(db) + defer func() { + if r := recover(); r != nil || err != nil { + dao.Rollback(db) + panic(r) + } + }() + isDuplicated, err := addOrderOrWaybillStatus(orderStatus, db) + if err != nil || isDuplicated { + if err == nil { + dao.Commit(db) + } + return err + } + _, err = c.loadAfsOrder(db, afsOrder.AfsOrderID, afsOrder.VendorID) + if dao.IsNoRowsError(err) { + err = c.SaveAfsOrder(db, afsOrder, isAdjust) + } + if err != nil { + return err + } + dao.Commit(db) + if orderStatus.Status == model.AfsOrderStatusWait4Approve { + + } else { + + } + return err +} + +func (c *OrderManager) SaveAfsOrder(db *dao.DaoDB, afsOrder *model.AfsOrder, isDeleteFirst bool) (err error) { + globals.SugarLogger.Debug(afsOrder.AfsOrderID) + if db == nil { + db = dao.GetDB() + } + if err = c.updateAfsOrderSkuOtherInfo(db, afsOrder); err != nil { + return err + } + dao.Begin(db) + defer func() { + if r := recover(); r != nil || err != nil { + dao.Rollback(db) + if r != nil { + panic(r) + } + } + }() + if isDeleteFirst { + err = utils.CallFuncLogError(func() error { + _, err = dao.DeleteEntity(db, afsOrder, "AfsOrderID") + return err + }, "SaveAfsOrder delete AfsOrder, afsOrderID:%s", afsOrder.AfsOrderID) + if err != nil { + return err + } + err = utils.CallFuncLogError(func() error { + _, err = dao.DeleteEntity(db, &model.OrderSkuFinancial{ + AfsOrderID: afsOrder.AfsOrderID, + }, "AfsOrderID") + return err + }, "SaveAfsOrder delete OrderSkuFinancial, afsOrderID:%s", afsOrder.AfsOrderID) + if err != nil { + return err + } + } + // 平台结算扣除汇总--平台补贴,售后产生运费,平台收包装费,同城运费、、、 + deductionsByPm := afsOrder.PmSubsidyMoney + afsOrder.AfsFreightMoney + afsOrder.BoxMoney + afsOrder.TongchengFreightMoney + afsOrder.RefundMoneyByCal = afsOrder.SkuUserMoney + afsOrder.FreightUserMoney + deductionsByPm - afsOrder.PmRefundMoney + // order.TotalMoney += order.SkuJxMoney // 退款单京西补贴部分先不作计算 + if err = dao.CreateEntity(db, afsOrder); err != nil { + globals.SugarLogger.Warnf("On SaveAfsOrder afsOrder.AfsOrderID:%s err: SaveAfsOrder is err", afsOrder.AfsOrderID) + return err + } + + // 京西结算扣除汇总,先不作计算,计算单条sku最终扣款金额(+该条sku承担的平台结算扣除金额) + for _, orderSku := range afsOrder.Skus[1:] { + orderSku.RefundMoneyByCal = orderSku.PmSkuSubsidyMoney + + utils.Float64TwoInt64(float64(afsOrder.RefundMoneyByCal-afsOrder.PmSkuSubsidyMoney)*float64(orderSku.UserMoney+orderSku.PmSubsidyMoney-orderSku.PmSkuSubsidyMoney)/float64(afsOrder.SkuUserMoney+afsOrder.PmSubsidyMoney-afsOrder.PmSkuSubsidyMoney)) + afsOrder.Skus[0].RefundMoneyByCal += orderSku.RefundMoneyByCal + if err = dao.CreateEntity(db, orderSku); err != nil { + globals.SugarLogger.Warnf("On SaveAfsOrder afsOrder.AfsOrderID:%s err: SaveAfsOrderSku is err", afsOrder.AfsOrderID) + return err + } + } + if len(afsOrder.Skus) > 0 { + orderSku := afsOrder.Skus[0] + orderSku.RefundMoneyByCal = afsOrder.RefundMoneyByCal - orderSku.RefundMoneyByCal + if err = dao.CreateEntity(db, orderSku); err != nil { + globals.SugarLogger.Warnf("On SaveAfsOrder afsOrder.AfsOrderID:%s err: SaveAfsOrderSku is err", afsOrder.AfsOrderID) + return err + } + } else { + globals.SugarLogger.Warnf("On SaveAfsOrder afsOrder.AfsOrderID:%s err: afsOrder have no sku", afsOrder.AfsOrderID) + } + dao.Commit(db) + return err +} + +func (c *OrderManager) OnAfsOrderStatusChanged(orderStatus *model.OrderStatus) (err error) { + db := dao.GetDB() + dao.Begin(db) + defer func() { + if r := recover(); r != nil || err != nil { + dao.Rollback(db) + if r != nil { + panic(r) + } + } + }() + isDuplicated, _, err := c.addAfsOrderStatus(db, orderStatus) + if err != nil || isDuplicated { + if err == nil { + dao.Commit(db) + } + return err + } + dao.Commit(db) + return err +} + +func (c *OrderManager) addAfsOrderStatus(db *dao.DaoDB, orderStatus *model.OrderStatus) (isDuplicated bool, order *model.AfsOrder, err error) { + globals.SugarLogger.Debugf("addAfsOrderStatus refOrderID:%s, orderID:%s", orderStatus.RefVendorOrderID, orderStatus.VendorOrderID) + if db == nil { + db = dao.GetDB() + } + isDuplicated, err = addOrderOrWaybillStatus(orderStatus, db) + if err == nil && !isDuplicated && (orderStatus.Status != model.OrderStatusUnknown && orderStatus.Status != model.OrderStatusMsg) { + order = &model.AfsOrder{ + AfsOrderID: orderStatus.VendorOrderID, + VendorID: orderStatus.VendorID, + } + if err = db.Db.ReadForUpdate(order, "AfsOrderID", "VendorID"); err == nil { + if orderStatus.Status > model.OrderStatusUnknown { // todo 要求status不能回绕 + order.VendorStatus = orderStatus.VendorStatus + order.Status = orderStatus.Status + updateFields := []string{ + "VendorStatus", + "Status", + } + if model.IsAfsOrderFinalStatus(orderStatus.Status) { + order.AfsFinishedAt = orderStatus.StatusTime + updateFields = append(updateFields, "AfsFinishedAt") + } + utils.CallFuncLogError(func() error { + _, err = dao.UpdateEntity(db, order, updateFields...) + return err + }, "addAfsOrderStatus update orderID:%s, status:%v", order.VendorOrderID, orderStatus) + } else { + isDuplicated = true + } + } else { + if dao.IsNoRowsError(err) { // todo 消息错序 + err = nil + } else { + globals.SugarLogger.Warnf("addAfsOrderStatus orderID:%s read failed with error:%v", order.VendorOrderID, err) + } + } + } + return isDuplicated, order, err +} + +func (c *OrderManager) updateAfsOrderSkuOtherInfo(db *dao.DaoDB, order *model.AfsOrder) (err error) { + globals.SugarLogger.Debugf("updateAfsOrderSkuOtherInfo orderID:%s, VendorStoreID:%s", order.VendorOrderID, order.VendorStoreID) + jxStoreID := order.JxStoreID + if jxStoreID == 0 { + jxStoreID = order.StoreID + } + opNumStr := "2" + if jxStoreID == 0 { + globals.SugarLogger.Infof("updateAfsOrderSkuOtherInfo [运营%s]订单在京西与平台都找不到京西门店信息orderID:%s, VendorStoreID:%s", opNumStr, order.VendorOrderID, order.VendorStoreID) + return nil + } + orderSkus := order.Skus + vendorSkuIDs := make([]int64, 0) + for _, v := range orderSkus { + intVendorSkuID := utils.Str2Int64WithDefault(v.VendorSkuID, 0) + if intVendorSkuID != 0 { + vendorSkuIDs = append(vendorSkuIDs, intVendorSkuID) + } + } + if len(vendorSkuIDs) > 0 { + tableName := "t2" + if model.MultiStoresVendorMap[order.VendorID] == 1 { + tableName = "t1" + } + fieldPrefix := dao.ConvertDBFieldPrefix(model.VendorNames[order.VendorID]) + sql := ` + SELECT %s.%s_id vendor_sku_id, t1.id sku_id, t2.price, t1.weight + FROM sku t1 + LEFT JOIN store_sku_bind t2 ON t1.id = t2.sku_id AND t2.deleted_at = ? AND t2.store_id = ? + WHERE t1.deleted_at = ? AND %s.%s_id IN (-1, ` + dao.GenQuestionMarks(len(vendorSkuIDs)) + ")" + sql = fmt.Sprintf(sql, tableName, fieldPrefix, tableName, fieldPrefix) + var skuInfos []*tStoreSkuBindAndVendorSkuID + if err = dao.GetRows(db, &skuInfos, sql, utils.DefaultTimeValue, jxStoreID, utils.DefaultTimeValue, vendorSkuIDs); err != nil { + globals.SugarLogger.Errorf("updateAfsOrderSkuOtherInfo can not get sku info for orderID:%s, error:%v", order.VendorOrderID, err) + return err + } + skumapper := make(map[int64]*tStoreSkuBindAndVendorSkuID) + for _, v := range skuInfos { + skumapper[v.VendorSkuID] = v + } + for _, v := range orderSkus { + intVendorSkuID := utils.Str2Int64WithDefault(v.VendorSkuID, 0) + if intVendorSkuID != 0 && v.VendorSkuID != "-70000" { // todo hard code + skuBindInfo := skumapper[intVendorSkuID] + if skuBindInfo == nil { + globals.SugarLogger.Infof("updateAfsOrderSkuOtherInfo [运营%s]%s订单sku找不到门店价格(或商品映射),orderID:%s, StoreID:%d, VendorSkuID:%s, sku:%v", opNumStr, model.VendorChineseNames[order.VendorID], order.VendorOrderID, jxStoreID, v.VendorSkuID, v) + } else { + v.JxSkuID = skuBindInfo.SkuID + } + } + } + } + return nil +} + +func (c *OrderManager) updateAfsOrderOtherInfo(db *dao.DaoDB, order *model.AfsOrder) (err error) { + globals.SugarLogger.Debugf("updateAfsOrderOtherInfo orderID:%s, VendorStoreID:%s", order.VendorOrderID, order.VendorStoreID) + if storeDetail, err := dao.GetStoreDetailByVendorStoreID(db, order.VendorStoreID, 0); err == nil { + order.JxStoreID = storeDetail.Store.ID + } + if err == nil { + if err = c.updateAfsOrderSkuOtherInfo(db, order); err == nil { + + } + } + return err +} diff --git a/business/model/const.go b/business/model/const.go index 499908325..9444795bb 100644 --- a/business/model/const.go +++ b/business/model/const.go @@ -216,11 +216,12 @@ const ( OrderStatusEndBegin = 100 // 以下的状态就是结束状态 OrderStatusFinished = 110 // 订单已完成 OrderStatusCanceled = 115 // 订单已取消 + OrderStatusEndEnd = 120 - AfsOrderStatusWait4Approve = 150 // 待审核售后单 - AfsOrderStatusNew = 155 // 已审核售后单,或不需要审核的新售后单 - AfsOrderStatusWait4ReceiveGoods = 160 // 退款退货的,需要商家确认收到货 - AfsOrderStatusReceivedGoods = 162 // 已确认收到货 + AfsOrderStatusWait4Approve = 155 // 待审核售后单 + AfsOrderStatusNew = 160 // 已审核或不需要审核售后单 + AfsOrderStatusWait4ReceiveGoods = 165 // 退款退货的,需要商家确认收到货 + AfsOrderStatusReceivedGoods = 167 // 已确认收到货 AfsOrderStatusFinished = 180 // 售后单成功完成 AfsOrderStatusFailed = 190 // 售后单失败 ) @@ -345,7 +346,7 @@ func IsOrderMainStatus(status int) bool { } func IsOrderFinalStatus(status int) bool { - return status >= OrderStatusEndBegin + return status >= OrderStatusEndBegin && status <= OrderStatusEndEnd } func IsOrderImportantStatus(status int) bool { @@ -360,3 +361,7 @@ func WaybillVendorID2Mask(vendorID int) (mask int8) { } return mask } + +func IsAfsOrderFinalStatus(status int) bool { + return status >= AfsOrderStatusFinished && status <= AfsOrderStatusFailed +} diff --git a/business/model/order_financial.go b/business/model/order_financial.go index ebfbaf86f..fa7c433b5 100644 --- a/business/model/order_financial.go +++ b/business/model/order_financial.go @@ -74,20 +74,22 @@ type AfsOrder struct { VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"` // 关联原始订单ID VendorOrderID2 string `orm:"column(vendor_order_id2);size(48);index" json:"vendorOrderID2"` // 关联原始订单ID2,饿百独有 AfsOrderID string `orm:"column(afs_order_id);size(48)" json:"afsOrderID"` // 售后订单ID - AfsCreateAt time.Time `orm:"type(datetime);index" json:"afsCreateAt"` // 订单生成时间 + AfsCreateAt time.Time `orm:"type(datetime);index" json:"afsCreateAt"` // 售后单生成时间 + AfsFinishedAt time.Time `orm:"type(datetime);index" json:"afsFinishedAt"` // 售后单结束时间 VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"` // 外部系统里记录的storeid StoreID int `orm:"column(store_id)" json:"storeID"` // 接口返回的京西门店ID JxStoreID int `orm:"column(jx_store_id)" json:"jxStoreID"` // 根据VendorStoreID在本地系统里查询出来的 jxstoreid - // Status int `json:"status"` - // VendorStatus string `orm:"size(255)" json:"vendorStatus"` - // ReasonType int8 `json:"reasonType"` // 售后原因 - // VendorReasonType string `orm:"size(255)" json:"vendorReasonType"` - // ReasonDesc string `orm:"size(1024)" json:"reasonDesc"` // 售后原因描述 - // ReasonImgList string `orm:"size(1024)" json:"reasonImgList"` // 售后描述图片 - // AppealType int8 `json:"appealType"` // 售后方式 - // VendorAppealType string `orm:"size(255)" json:"vendorAppealType"` - // Flag int `json:"flag"` + // IsNeedApprove int8 `json:"isNeedApprove"` // 售后单是否需要商家审核 + Status int `json:"status"` + VendorStatus string `orm:"size(255)" json:"vendorStatus"` + ReasonType int8 `json:"reasonType"` // 售后原因 + VendorReasonType string `orm:"size(255)" json:"vendorReasonType"` + ReasonDesc string `orm:"size(1024)" json:"reasonDesc"` // 售后原因描述 + ReasonImgList string `orm:"size(1024)" json:"reasonImgList"` // 售后描述图片 + AppealType int8 `json:"appealType"` // 售后方式 + VendorAppealType string `orm:"size(255)" json:"vendorAppealType"` + Flag int `json:"flag"` SkuUserMoney int64 `json:"skuUserMoney"` // 用户支付菜品金额 FreightUserMoney int64 `json:"freightUserMoney"` // 用户支付运费金额 @@ -153,6 +155,7 @@ type OrderSkuFinancial struct { func (o *OrderSkuFinancial) TableIndex() [][]string { return [][]string{ []string{"VendorOrderID", "VendorSkuID"}, + []string{"AfsOrderID", "VendorSkuID"}, } } diff --git a/business/partner/partner.go b/business/partner/partner.go index a4f5a76b9..a39d93ec5 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -141,6 +141,11 @@ type IOrderManager interface { SaveAfsOrderFinancialInfo(afsOrder *model.AfsOrder) (err error) GetOrderWaybillInfo(ctx *jxcontext.Context, vendorOrderID string, vendorID int, isNotEnded bool) (bills []*model.Waybill, err error) + + // afs order + OnAfsOrderAdjust(afsOrder *model.AfsOrder, orderStatus *model.OrderStatus) (err error) + OnAfsOrderNew(afsOrder *model.AfsOrder, orderStatus *model.OrderStatus) (err error) + OnAfsOrderStatusChanged(orderStatus *model.OrderStatus) (err error) } type IStoreManager interface { diff --git a/business/partner/purchase/jd/callback.go b/business/partner/purchase/jd/callback.go index ae619ad57..f137ed88f 100644 --- a/business/partner/purchase/jd/callback.go +++ b/business/partner/purchase/jd/callback.go @@ -9,8 +9,14 @@ import ( func OnOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) { if curPurchaseHandler != nil { - if retVal = curPurchaseHandler.OnOrderMsg(msg); retVal == nil { - retVal = jdapi.Err2CallbackResponse(errors.New("Internal Error"), "") + if msg.MsgURL == jdapi.CallbackMsgAfterSaleBillStatus { + utils.CallFuncAsync(func() { + retVal = OnAfsOrderMsg(msg) + }) + } else { + if retVal = curPurchaseHandler.OnOrderMsg(msg); retVal == nil { + retVal = jdapi.Err2CallbackResponse(errors.New("Internal Error"), "") + } } } return retVal @@ -25,6 +31,15 @@ func OnWaybillMsg(msg *jdapi.CallbackDeliveryStatusMsg) (retVal *jdapi.CallbackR return retVal } +func OnAfsOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) { + if curPurchaseHandler != nil { + if retVal = curPurchaseHandler.OnAfsOrderMsg(msg); retVal == nil { + retVal = jdapi.Err2CallbackResponse(errors.New("Internal Error"), "") + } + } + return retVal +} + func OnStoreMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) { if curPurchaseHandler != nil { retVal = curPurchaseHandler.onStoreMsg(msg) diff --git a/business/partner/purchase/jd/order_afs.go b/business/partner/purchase/jd/order_afs.go new file mode 100644 index 000000000..206f5ee0c --- /dev/null +++ b/business/partner/purchase/jd/order_afs.go @@ -0,0 +1,122 @@ +package jd + +import ( + "git.rosy.net.cn/baseapi/platformapi/jdapi" + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxutils" + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/business/partner" + "git.rosy.net.cn/jx-callback/globals/api" +) + +var ( + AfsVendorStatus2StatusMap = map[string]int{ + jdapi.AfsServiceStateWaiting4Audit: model.AfsOrderStatusWait4Approve, // 需要审核 + + jdapi.AfsServiceStateRefundProcessing: model.AfsOrderStatusNew, + jdapi.AfsServiceStateWaiting4DirectCompensate: model.AfsOrderStatusNew, + jdapi.AfsServiceStateWaiting4ReturnGoods: model.AfsOrderStatusNew, + + jdapi.AfsServiceStateWaiting4MerchantReceiveGoods: model.AfsOrderStatusWait4ReceiveGoods, + + jdapi.AfsServiceStateRefundSuccess: model.AfsOrderStatusFinished, + jdapi.AfsServiceStateSolved: model.AfsOrderStatusFinished, + jdapi.AfsServiceStateDirectCompensateSuccess: model.AfsOrderStatusFinished, + jdapi.AfsServiceStateReturnGoodsSuccess: model.AfsOrderStatusFinished, + + jdapi.AfsServiceStateRefundFailed: model.AfsOrderStatusFailed, + jdapi.AfsServiceStateAuditRefused: model.AfsOrderStatusFailed, + jdapi.AfsServiceStateUserCanceled: model.AfsOrderStatusFailed, + jdapi.AfsServiceStateMerchantFailedReceiveGoods: model.AfsOrderStatusFailed, + jdapi.AfsServiceStateDirectCompensateFailed: model.AfsOrderStatusFailed, + jdapi.AfsServiceStateReturnGoodsFailed: model.AfsOrderStatusFailed, + } +) + +func (c *PurchaseHandler) OnAfsOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) { + jxutils.CallMsgHandler(func() { + retVal = c.onAfsOrderMsg(msg) + }, jxutils.ComposeUniversalOrderID(msg.BillID, model.VendorIDJD)) + return retVal +} + +func (c *PurchaseHandler) onAfsOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) { + afsInfo, err := api.JdAPI.GetAfsService2(msg.BillID) + if err == nil { + var err error + status := c.callbackAfsMsg2Status(msg, afsInfo) + if status.Status <= model.AfsOrderStatusNew { + afsOrder := c.buildAfsOrder(afsInfo) + err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, status) + } else { + err = partner.CurOrderManager.OnAfsOrderStatusChanged(status) + } + retVal = jdapi.Err2CallbackResponse(err, status.VendorStatus) + } + return retVal +} + +func (c *PurchaseHandler) callbackAfsMsg2Status(msg *jdapi.CallbackOrderMsg, afsInfo *jdapi.AfsServiceResponse) *model.OrderStatus { + orderStatus := &model.OrderStatus{ + VendorOrderID: msg.BillID, // 是售后单ID,不是订单ID,订单ID在RefVendorOrderID中 + VendorID: model.VendorIDJD, + OrderType: model.OrderTypeOrder, + RefVendorOrderID: afsInfo.OrderID, + RefVendorID: model.VendorIDJD, + VendorStatus: msg.StatusID, + Status: c.GetAfsStatusFromVendorStatus(msg.StatusID), + StatusTime: utils.Str2Time(msg.Timestamp), + Remark: msg.Remark, + } + return orderStatus +} + +func (c *PurchaseHandler) GetAfsStatusFromVendorStatus(vendorStatus string) int { + if status, ok := AfsVendorStatus2StatusMap[vendorStatus]; ok { + return status + } + return model.OrderStatusUnknown +} + +func (p *PurchaseHandler) buildAfsOrder(afsInfo *jdapi.AfsServiceResponse) (afsOrder *model.AfsOrder) { + afsOrder = &model.AfsOrder{ + VendorID: model.VendorIDJD, + AfsOrderID: afsInfo.AfsServiceOrder, + VendorOrderID: afsInfo.OrderID, + VendorStoreID: afsInfo.StationID, + StoreID: int(utils.Str2Int64WithDefault(afsInfo.StationNumOutSystem, 0)), + AfsCreateAt: afsInfo.UpdateTime.GoTime(), + FreightUserMoney: afsInfo.OrderFreightMoney, + AfsFreightMoney: afsInfo.AfsFreight, + BoxMoney: afsInfo.PackagingMoney, + TongchengFreightMoney: afsInfo.TongchengFreightMoney, + SkuBoxMoney: afsInfo.MealBoxMoney, + } + for _, x := range afsInfo.AfsDetailList { + orderSku := &model.OrderSkuFinancial{ + VendorID: model.VendorIDJD, + AfsOrderID: afsOrder.AfsOrderID, + VendorOrderID: afsOrder.VendorOrderID, + VendorStoreID: afsOrder.VendorStoreID, + StoreID: afsOrder.StoreID, + // ConfirmTime: afsOrder.AfsCreateAt, + VendorSkuID: utils.Int64ToStr(x.WareID), + SkuID: int(utils.Str2Int64WithDefault(x.SkuIDIsv, 0)), + Name: x.WareName, + UserMoney: x.AfsMoney, + PmSkuSubsidyMoney: x.PlatPayMoney, + IsAfsOrder: 1, + } + afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney + orderSku.PmSubsidyMoney += orderSku.PmSkuSubsidyMoney + + for _, y := range x.AfsSkuDiscountList { + orderSku.PmSubsidyMoney += y.PlatPayMoney + } + + afsOrder.SkuUserMoney += orderSku.UserMoney + afsOrder.PmSubsidyMoney += orderSku.PmSubsidyMoney + afsOrder.Skus = append(afsOrder.Skus, orderSku) + } + return afsOrder +} diff --git a/controllers/jd_callback.go b/controllers/jd_callback.go index 4050d1f7b..e1e83b3b4 100644 --- a/controllers/jd_callback.go +++ b/controllers/jd_callback.go @@ -183,8 +183,8 @@ func (c *DjswController) NewAfterSaleBill() { } func (c *DjswController) AfterSaleBillStatus() { - // c.orderStatus(false) - c.OrderAccounting() + c.orderStatus(false) + // c.OrderAccounting() } func (c *DjswController) OrderAccounting() {