Merge branch 'jdshop' of https://e.coding.net/rosydev/jx-callback into jdshop

This commit is contained in:
richboo111
2023-07-10 14:27:42 +08:00
6 changed files with 127 additions and 56 deletions

View File

@@ -494,7 +494,6 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI
// PickupGoods 拣货
func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bool, userName string) (err error) {
globals.SugarLogger.Debugf("PickupGoods 自动拣货:%s, %s", utils.Format4Output(isSelfDelivery, false), utils.Format4Output(order, false))
if isSelfDelivery {
param, err := orderStatusChangeNotice(order, tao_vegetable.OrderStatusPickedUp)
if err != nil {
@@ -504,9 +503,8 @@ func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bo
globals.SugarLogger.Debugf("PickupGoods 拣货失败可能是BizSubOrderId 没填写 : %s", err.Error())
return err
}
c.postFakeMsg(order.VendorOrderID, tao_vegetable.OrderStatusPickedUp, tao_vegetable.OrderStatusPickedUp)
}
c.postFakeMsg(order.VendorOrderID, tao_vegetable.OrderStatusPickedUp, tao_vegetable.OrderStatusPickedUp)
return err
}
@@ -682,52 +680,69 @@ func (c *PurchaseHandler) CancelOrder(ctx *jxcontext.Context, order *model.Goods
return err
}
// AdjustOrder 商户发起部分退款(取消订单部分商品)
// AdjustOrder 商户发起部分退款(取消订单部分商品),淘宝没有部分退款,所以调整订单的时候就是在拣货,把缺货的部分排除
// 1、子单部分缺货骑手妥投的时候退款给用户
// 2、子单整单缺货商家打包完成退款给用户
// 3、整单缺货拣货完成退款给用户
func (c *PurchaseHandler) AdjustOrder(ctx *jxcontext.Context, order *model.GoodsOrder, removedSkuList []*model.OrderSku, reason string) (err error) {
api := getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "")
// 美团外卖必须要确认订单后才能调整单
if order.Status < model.OrderStatusFinishedPickup {
if err = c.PickupGoods(order, false, ctx.GetUserName()); err != nil {
return err
}
globals.SugarLogger.Debugf("removedSkuList := %s", utils.Format4Output(removedSkuList, false))
// 获取需要退货商品的子订单id
refundSkuOrderID := make(map[int]*model.OrderSku, 0)
for _, v := range removedSkuList {
refundSkuOrderID[v.SkuID] = v
}
// 获取订单的子订单id
requestParam := &request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
param := &request591.AlibabaAelophyOrderWorkCallbackRequest{}
param.WorkCallbackRequest = &domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackRequest{
StoreId: utils.String2Pointer(order.VendorStoreID),
BizOrderId: utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID)),
}}
orderDetail, err := api.QueryOrderDetail(requestParam)
Status: utils.String2Pointer(tao_vegetable.OrderStatusPickedUp),
}
workCallbackSubOrderInfoList := make([]domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackSubOrderInfo, 0, 0)
orderDetail, err := getAPI(order.VendorOrgCode, 0, "").QueryOrderDetail(&request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
StoreId: utils.String2Pointer(order.VendorStoreID),
BizOrderId: utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID)),
}})
if err != nil {
return err
}
skuMap := make(map[string]string, 0)
for _, v := range *orderDetail.SubOrderResponseList {
skuMap[*v.SkuCode] = *v.OutSubOrderId
}
// 获取需要退货商品的子订单id
refundSkuOrderID := make([]string, 0, len(removedSkuList))
for _, v := range removedSkuList {
if orderId, ok := skuMap[v.VendorSkuID]; ok {
refundSkuOrderID = append(refundSkuOrderID, orderId)
// 缺货
if refundSkuOrderID[utils.Str2Int(*v.SkuCode)] != nil {
if refundSkuOrderID[utils.Str2Int(*v.SkuCode)].Count > utils.Float64TwoInt(*v.BuyStockQuantity) {
return fmt.Errorf("商品[%s],缺货数量[%d],大于订单数量[%d],请重新调整", refundSkuOrderID[utils.Str2Int(*v.SkuCode)].SkuName, refundSkuOrderID[utils.Str2Int(*v.SkuCode)].Count, utils.Float64TwoInt(*v.BuyStockQuantity))
}
workCallbackSubOrderInfo := domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackSubOrderInfo{
BizSubOrderId: v.BizSubOrderId,
SkuCode: v.SkuCode,
PickSaleQuantity: utils.String2Pointer(utils.Int2Str(utils.Float64TwoInt(*v.BuySaleQuantity) - refundSkuOrderID[utils.Str2Int(*v.SkuCode)].Count)),
PickStockQuantity: utils.String2Pointer(utils.Int2Str(utils.Float64TwoInt(*v.BuyStockQuantity) - refundSkuOrderID[utils.Str2Int(*v.SkuCode)].Count)),
}
workCallbackSubOrderInfoList = append(workCallbackSubOrderInfoList, workCallbackSubOrderInfo)
} else {
workCallbackSubOrderInfo := domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackSubOrderInfo{
BizSubOrderId: v.BizSubOrderId,
SkuCode: v.SkuCode,
PickSaleQuantity: utils.String2Pointer(utils.Float64ToStr(*v.BuySaleQuantity)),
PickStockQuantity: utils.String2Pointer(utils.Float64ToStr(*v.BuyStockQuantity)),
}
workCallbackSubOrderInfoList = append(workCallbackSubOrderInfoList, workCallbackSubOrderInfo)
}
}
// 商家申请退货
param := &request3156.AlibabaTclsAelophyRefundCsapplyRequest{
RefundCsApplyDTO: &domain3156.AlibabaTclsAelophyRefundCsapplyRefundCsApplyDto{
ReasonId: utils.Int64ToPointer(1111),
OutOrderId: utils.String2Pointer(order.VendorOrderID),
StoreId: utils.String2Pointer(order.VendorStoreID),
RequestId: utils.String2Pointer(fmt.Sprintf("%s%d", order.VendorStoreID, time.Now().UnixNano())),
OutSubOrderIds: &refundSkuOrderID,
Memo: utils.String2Pointer(reason),
},
}
// 出库
param.WorkCallbackRequest.WorkCallbackSubOrderInfoList = &workCallbackSubOrderInfoList
return api.PartialRefund(param)
if err = api.DeliveryFinish(param); err != nil {
globals.SugarLogger.Debugf("PickupGoods 拣货失败可能是BizSubOrderId 没填写 : %s", err.Error())
return err
}
c.postFakeMsg(order.VendorOrderID, tao_vegetable.OrderStatusPickedUp, tao_vegetable.OrderStatusPickedUp)
return nil
}
// ListOrders 获取门店订单列表(补全遗漏订单)

View File

@@ -312,24 +312,25 @@ func createTaoVegetable(ctx *jxcontext.Context, api *tao_vegetable.API, storeSku
DeliverySpec: utils.String2Pointer(utils.Int2Str(model.YES)),
MemberPrice: price,
Storage: utils.String2Pointer(tao_vegetable.CreateStorage),
PickFloatRate: utils.String2Pointer(utils.Int2Str(model.NO)), // ? 0
ForbidReceiveDays: utils.Int64ToPointer(tao_vegetable.CreateShelfLife), // ? 7
ForbidSalesDays: utils.Int64ToPointer(model.NO), // ? 0
OverloadRate: utils.String2Pointer(utils.Int2Str(model.NO)), // ? 0
WarnDays: utils.Int64ToPointer(model.NO), // ? 0
FixedFlag: utils.Int64ToPointer(model.NO), // ? 0
PurchaseSpec: utils.String2Pointer(utils.Int2Str(model.YES)), // ? 1
//PurchaseUnit: utils.String2Pointer(storeSku.Unit), // ? 同上
PurchaseUnit: utils.String2Pointer("份"), // ? 同上
LabelStyleType: utils.String2Pointer(tao_vegetable.CreateLabelStyleType), // 库存单位
ItemTypeNew: utils.Int64ToPointer(tao_vegetable.CreateItemTypeNewVegetable),
SkuPrice: price, // 优先使用skuPrice 靠后SalePrice
Period: utils.Int64ToPointer(tao_vegetable.CreateShelfLife), // 优先使用period 靠后shelf_life
FragileFlag: utils.Int64ToPointer(model.YES),
DeliveryStorage: utils.String2Pointer(tao_vegetable.CreateItemDeliveryStorage),
TemporaryFlag: utils.Int64ToPointer(model.NO),
IsOnline: utils.Int64ToPointer(tao_vegetable.CreateIsOnline),
MerchantCatCode: utils.String2Pointer(storeSku.VendorCatID), // 优先使用 靠后 category_code
PickFloatRate: utils.String2Pointer(utils.Int2Str(model.NO)), // ? 0
ForbidReceiveDays: utils.Int64ToPointer(tao_vegetable.CreateShelfLife), // ? 7
ForbidSalesDays: utils.Int64ToPointer(model.NO), // ? 0
OverloadRate: utils.String2Pointer(utils.Int2Str(model.NO)), // ? 0
WarnDays: utils.Int64ToPointer(model.NO), // ? 0
FixedFlag: utils.Int64ToPointer(model.NO), // ? 0
PurchaseSpec: utils.String2Pointer(utils.Int2Str(model.YES)), // ? 1
PurchaseUnit: utils.String2Pointer("份"), // ? 同上
LabelStyleType: utils.String2Pointer(tao_vegetable.CreateLabelStyleType), // 库存单位
ItemTypeNew: utils.Int64ToPointer(tao_vegetable.CreateItemTypeNewVegetable),
SkuPrice: price, // 优先使用skuPrice 靠后SalePrice
Period: utils.Int64ToPointer(tao_vegetable.CreateShelfLife), // 优先使用period 靠后shelf_life
FragileFlag: utils.Int64ToPointer(model.YES),
DeliveryStorage: utils.String2Pointer(tao_vegetable.CreateItemDeliveryStorage),
TemporaryFlag: utils.Int64ToPointer(model.NO),
IsOnline: utils.Int64ToPointer(tao_vegetable.CreateIsOnline),
MerchantCatCode: utils.String2Pointer(storeSku.VendorCatID), // 优先使用 靠后 category_code
RichText: utils.String2Pointer(storeSku.Name),
AllowAppSale: utils.Int64ToPointer(tao_vegetable.IsAllowAppSale),
}
sku.SkuPicUrls = uploadImg(api, []string{storeSku.ImgOrigin, storeSku.Img, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5, storeSku.DescImg})
if sku.SkuPicUrls == nil {