diff --git a/business/jxcallback/orderman/order_afs.go b/business/jxcallback/orderman/order_afs.go index 510c0b675..530eebc64 100644 --- a/business/jxcallback/orderman/order_afs.go +++ b/business/jxcallback/orderman/order_afs.go @@ -330,8 +330,9 @@ func (c *OrderManager) updateAfsOrderOtherInfo(db *dao.DaoDB, afsOrder *model.Af afsOrder.JxStoreID = storeDetail.Store.ID } } + order, err2 := c.LoadOrder(afsOrder.VendorOrderID, afsOrder.VendorID) if afsOrder.StoreID == 0 && afsOrder.JxStoreID == 0 { - if order, err2 := c.LoadOrder(afsOrder.VendorOrderID, afsOrder.VendorID); err2 == nil { + if err2 == nil { afsOrder.JxStoreID = order.JxStoreID if afsOrder.StoreID == 0 { afsOrder.StoreID = order.StoreID @@ -349,6 +350,9 @@ func (c *OrderManager) updateAfsOrderOtherInfo(db *dao.DaoDB, afsOrder *model.Af } if err = c.updateAfsOrderSkuOtherInfo(db, afsOrder); err == nil { jxutils.RefreshAfsOrderSkuRelated(afsOrder) + if afsOrder.RefundType == model.AfsTypeFullRefund && afsOrder.VendorID == model.VendorIDJX && order.DeliveryType != model.OrderDeliveryTypeSelfTake { + afsOrder.SkuUserMoney += order.ActualPayPrice + } } } return err @@ -371,9 +375,9 @@ func (c *OrderManager) setAfsOrderID(db *dao.DaoDB, orderStatus *model.OrderStat list := strings.Split(afsOrderList[0].AfsOrderID, "-") if len(list) > 1 { index = int(utils.Str2Int64WithDefault(list[1], 0)) - if afsOrderList[0].Status >= model.AfsOrderStatusFinished { - index++ - } + //if afsOrderList[0].Status >= model.AfsOrderStatusFinished { + index++ + //} } } } else { diff --git a/business/partner/purchase/jx/phpjx/order_afs.go b/business/partner/purchase/jx/phpjx/order_afs.go index 5259464f0..78727962b 100644 --- a/business/partner/purchase/jx/phpjx/order_afs.go +++ b/business/partner/purchase/jx/phpjx/order_afs.go @@ -1,7 +1,9 @@ package phpjx import ( + "fmt" "git.rosy.net.cn/jx-callback/business/model/dao" + "strings" "time" "git.rosy.net.cn/baseapi/platformapi/jdapi" @@ -40,9 +42,36 @@ func OnAfsOrderMsg(msg *CallbackMsg) (err error) { return err } +func CheckOrderSkuCanRefund(db *dao.DaoDB, afsOrder *Data4AfsOrder) error { + // 获取此订单商品吃否存在售后单 + refundFinancial, err := dao.GetStoreAfsOrderSkuList2(db, []string{afsOrder.VendorOrderID}) + if err != nil && !strings.Contains(err.Error(), "no row found") { + return err + } + + if len(refundFinancial) == model.NO { + return nil + } + + for _, r := range refundFinancial { + for _, s := range afsOrder.Skus { + if r.SkuID == utils.Str2Int(s.VendorSkuID) { + return fmt.Errorf("商品:[%s],已经存在售后单无法重复申请", s.Name) + } + } + } + + return nil +} + func buildAfsOrder(msg *CallbackMsg) (outAfsOrder *model.AfsOrder, err error) { var afsOrder *Data4AfsOrder + var db = dao.GetDB() if err = utils.UnmarshalUseNumber([]byte(msg.Data), &afsOrder); err == nil { + if err := CheckOrderSkuCanRefund(db, afsOrder); err != nil { + return nil, err + } + outAfsOrder = &model.AfsOrder{ VendorID: model.VendorIDJX, AfsOrderID: afsOrder.AfsOrderID, @@ -65,6 +94,7 @@ func buildAfsOrder(msg *CallbackMsg) (outAfsOrder *model.AfsOrder, err error) { skuNumber := 0 // 申请退款商品种类个数 skuCount := 0 // 申请商品退款总条数 refundMoney := 0 + // 当前申请退款的商品 for _, x := range afsOrder.Skus { orderSku := &model.OrderSkuFinancial{ Count: x.Count, @@ -81,8 +111,18 @@ func buildAfsOrder(msg *CallbackMsg) (outAfsOrder *model.AfsOrder, err error) { skuNumber++ refundMoney += x.Count * int(x.SalePrice) } + // 已经退款商品 + refundFinancial, err := dao.GetStoreAfsOrderSkuList2(db, []string{afsOrder.VendorOrderID}) + if err != nil && !dao.IsNoRowsError(err) { + return nil, err + } + for _, f := range refundFinancial { + skuCount += f.Count + skuNumber++ + refundMoney += f.Count * int(f.SalePrice) + } - // 获取订单商品列表 + // 获取订单商品列表(所有的订单商品) skuList, err := dao.GetSimpleOrderSkus(dao.GetDB(), afsOrder.VendorOrderID, nil) if err != nil { return nil, err