Merge branch 'jdshop' of https://e.coding.net/rosydev/jx-callback into jdshop
This commit is contained in:
@@ -1514,7 +1514,8 @@ func (s *DefScheduler) updateBillsInfo(savedOrderInfo *WatchOrderInfo, bill *mod
|
|||||||
|
|
||||||
func (s *DefScheduler) autoPickupGood(savedOrderInfo *WatchOrderInfo) (err error) {
|
func (s *DefScheduler) autoPickupGood(savedOrderInfo *WatchOrderInfo) (err error) {
|
||||||
order := savedOrderInfo.order
|
order := savedOrderInfo.order
|
||||||
flag := model.IsOrderDeliveryByStore(order) || model.IsOrderDeliveryBySelf(order)
|
store, _ := dao.GetStoreDetail(dao.GetDB(), order.JxStoreID, order.VendorID, "")
|
||||||
|
flag := (model.IsOrderDeliveryByStore(order) || model.IsOrderDeliveryBySelf(order)) && store.AutoPickup == model.YES
|
||||||
if err = s.PickupGoods(order, flag, "autoPickup"); err == nil {
|
if err = s.PickupGoods(order, flag, "autoPickup"); err == nil {
|
||||||
order.DeliveryFlag |= model.OrderDeliveryFlagMaskAutoPickup
|
order.DeliveryFlag |= model.OrderDeliveryFlagMaskAutoPickup
|
||||||
partner.CurOrderManager.UpdateOrderFields(order, []string{"DeliveryFlag"})
|
partner.CurOrderManager.UpdateOrderFields(order, []string{"DeliveryFlag"})
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/astaxie/beego/server/web"
|
"github.com/astaxie/beego/server/web"
|
||||||
|
beego "github.com/astaxie/beego/server/web"
|
||||||
"regexp"
|
"regexp"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -69,13 +70,28 @@ func CreateStoreCategoryByStoreSku(ctx *jxcontext.Context, vendorID, storeID int
|
|||||||
}
|
}
|
||||||
|
|
||||||
func SyncStoreCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID, storeID int, vendorStoreID string, nameIDs, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
func SyncStoreCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID, storeID int, vendorStoreID string, nameIDs, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
// 668594 正式服印象汇 668469 测试服芬姐
|
db := dao.GetDB()
|
||||||
|
// 668594 正式服印象汇 668469 测试服芬姐(淘宝所有门店公用分类)
|
||||||
if storeID != 668594 && storeID != 668469 && vendorID == model.VendorIDTaoVegetable {
|
if storeID != 668594 && storeID != 668469 && vendorID == model.VendorIDTaoVegetable {
|
||||||
|
var totalCategory []*model.StoreSkuCategoryMap
|
||||||
|
switch beego.BConfig.RunMode {
|
||||||
|
case "dev":
|
||||||
|
totalCategory, _ = dao.GetDetailStoreSkuCategoryMap(db, 668469)
|
||||||
|
case "jxgy":
|
||||||
|
|
||||||
|
default:
|
||||||
|
totalCategory, _ = dao.GetDetailStoreSkuCategoryMap(db, 668594)
|
||||||
|
}
|
||||||
|
if totalCategory != nil {
|
||||||
|
for _, v := range totalCategory {
|
||||||
|
dao.UpdateStoreSkuCategory(db, v.CategoryID, storeID, v.TaoID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
handler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler)
|
handler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler)
|
||||||
num := 0
|
num := 0
|
||||||
db := dao.GetDB()
|
|
||||||
rootTask := tasksch.NewSeqTask(fmt.Sprintf("%s SyncStoreCategory step1", model.VendorChineseNames[vendorID]), ctx,
|
rootTask := tasksch.NewSeqTask(fmt.Sprintf("%s SyncStoreCategory step1", model.VendorChineseNames[vendorID]), ctx,
|
||||||
func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
||||||
level := step + 1
|
level := step + 1
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package dao
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
beego "github.com/astaxie/beego/server/web"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -2011,6 +2012,40 @@ func GetStoreSkuCategoryMap(db *DaoDB, categoryID, storeID int) (storeSkuCategor
|
|||||||
return storeSkuCategoryMap, err
|
return storeSkuCategoryMap, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDetailStoreSkuCategoryMap 淘宝是所有门店公用一套分类 用默认门店赋值其余门店
|
||||||
|
func GetDetailStoreSkuCategoryMap(db *DaoDB, storeId int) (storeSkuCategoryMap []*model.StoreSkuCategoryMap, err error) {
|
||||||
|
sql := `
|
||||||
|
SELECT *
|
||||||
|
FROM store_sku_category_map
|
||||||
|
WHERE deleted_at = ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{utils.DefaultTimeValue}
|
||||||
|
|
||||||
|
if storeId != 0 {
|
||||||
|
sql += " AND store_id = ? "
|
||||||
|
sqlParams = append(sqlParams, storeId)
|
||||||
|
} else {
|
||||||
|
switch beego.BConfig.RunMode {
|
||||||
|
case "jxgy":
|
||||||
|
storeId = 0
|
||||||
|
case "dev":
|
||||||
|
storeId = 668469 // 测试服芬姐(淘宝所有门店公用分类)
|
||||||
|
default:
|
||||||
|
storeId = 668594 // 正式服印象汇
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GetRows(db, &storeSkuCategoryMap, sql, sqlParams)
|
||||||
|
return storeSkuCategoryMap, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateStoreSkuCategory 修改淘宝门店的分类code以及同步装太
|
||||||
|
func UpdateStoreSkuCategory(db *DaoDB, categoryId int, storeID int, vendorCode string) {
|
||||||
|
sql := ` UPDATE store_sku_category_map SET tao_id = ? ,tao_sync_status = ? WHERE store_id = ? AND category_id = ?`
|
||||||
|
param := []interface{}{vendorCode, 0, storeID, categoryId}
|
||||||
|
ExecuteSQL(db, sql, param...)
|
||||||
|
}
|
||||||
|
|
||||||
func GetStoreSkuListWithVendor(db *DaoDB, storeID, vendorID int, vendorOrgCode string) (skuList []*StoreSkuSyncInfo, err error) {
|
func GetStoreSkuListWithVendor(db *DaoDB, storeID, vendorID int, vendorOrgCode string) (skuList []*StoreSkuSyncInfo, err error) {
|
||||||
sql := `
|
sql := `
|
||||||
SELECT DISTINCT b.*, c.vendor_thing_id vendor_sku_id
|
SELECT DISTINCT b.*, c.vendor_thing_id vendor_sku_id
|
||||||
|
|||||||
@@ -494,7 +494,6 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI
|
|||||||
|
|
||||||
// PickupGoods 拣货
|
// PickupGoods 拣货
|
||||||
func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bool, userName string) (err error) {
|
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 {
|
if isSelfDelivery {
|
||||||
param, err := orderStatusChangeNotice(order, tao_vegetable.OrderStatusPickedUp)
|
param, err := orderStatusChangeNotice(order, tao_vegetable.OrderStatusPickedUp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -504,9 +503,8 @@ func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bo
|
|||||||
globals.SugarLogger.Debugf("PickupGoods 拣货失败可能是BizSubOrderId 没填写 : %s", err.Error())
|
globals.SugarLogger.Debugf("PickupGoods 拣货失败可能是BizSubOrderId 没填写 : %s", err.Error())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
c.postFakeMsg(order.VendorOrderID, tao_vegetable.OrderStatusPickedUp, tao_vegetable.OrderStatusPickedUp)
|
c.postFakeMsg(order.VendorOrderID, tao_vegetable.OrderStatusPickedUp, tao_vegetable.OrderStatusPickedUp)
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -682,52 +680,69 @@ func (c *PurchaseHandler) CancelOrder(ctx *jxcontext.Context, order *model.Goods
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// AdjustOrder 商户发起部分退款(取消订单部分商品)
|
// AdjustOrder 商户发起部分退款(取消订单部分商品),淘宝没有部分退款,所以调整订单的时候就是在拣货,把缺货的部分排除
|
||||||
|
// 1、子单部分缺货,骑手妥投的时候退款给用户
|
||||||
|
// 2、子单整单缺货,商家打包完成退款给用户
|
||||||
|
// 3、整单缺货,拣货完成退款给用户
|
||||||
func (c *PurchaseHandler) AdjustOrder(ctx *jxcontext.Context, order *model.GoodsOrder, removedSkuList []*model.OrderSku, reason string) (err error) {
|
func (c *PurchaseHandler) AdjustOrder(ctx *jxcontext.Context, order *model.GoodsOrder, removedSkuList []*model.OrderSku, reason string) (err error) {
|
||||||
api := getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "")
|
api := getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "")
|
||||||
// 美团外卖必须要确认订单后才能调整单
|
|
||||||
if order.Status < model.OrderStatusFinishedPickup {
|
globals.SugarLogger.Debugf("removedSkuList := %s", utils.Format4Output(removedSkuList, false))
|
||||||
if err = c.PickupGoods(order, false, ctx.GetUserName()); err != nil {
|
// 获取需要退货商品的子订单id
|
||||||
return err
|
refundSkuOrderID := make(map[int]*model.OrderSku, 0)
|
||||||
}
|
for _, v := range removedSkuList {
|
||||||
|
refundSkuOrderID[v.SkuID] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取订单的子订单id
|
param := &request591.AlibabaAelophyOrderWorkCallbackRequest{}
|
||||||
requestParam := &request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
|
param.WorkCallbackRequest = &domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackRequest{
|
||||||
StoreId: utils.String2Pointer(order.VendorStoreID),
|
StoreId: utils.String2Pointer(order.VendorStoreID),
|
||||||
BizOrderId: utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID)),
|
BizOrderId: utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID)),
|
||||||
}}
|
Status: utils.String2Pointer(tao_vegetable.OrderStatusPickedUp),
|
||||||
orderDetail, err := api.QueryOrderDetail(requestParam)
|
}
|
||||||
|
|
||||||
|
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
skuMap := make(map[string]string, 0)
|
|
||||||
for _, v := range *orderDetail.SubOrderResponseList {
|
for _, v := range *orderDetail.SubOrderResponseList {
|
||||||
skuMap[*v.SkuCode] = *v.OutSubOrderId
|
// 缺货
|
||||||
|
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{
|
||||||
// 获取需要退货商品的子订单id
|
BizSubOrderId: v.BizSubOrderId,
|
||||||
refundSkuOrderID := make([]string, 0, len(removedSkuList))
|
SkuCode: v.SkuCode,
|
||||||
for _, v := range removedSkuList {
|
PickSaleQuantity: utils.String2Pointer(utils.Int2Str(utils.Float64TwoInt(*v.BuySaleQuantity) - refundSkuOrderID[utils.Str2Int(*v.SkuCode)].Count)),
|
||||||
if orderId, ok := skuMap[v.VendorSkuID]; ok {
|
PickStockQuantity: utils.String2Pointer(utils.Int2Str(utils.Float64TwoInt(*v.BuyStockQuantity) - refundSkuOrderID[utils.Str2Int(*v.SkuCode)].Count)),
|
||||||
refundSkuOrderID = append(refundSkuOrderID, orderId)
|
}
|
||||||
|
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{
|
param.WorkCallbackRequest.WorkCallbackSubOrderInfoList = &workCallbackSubOrderInfoList
|
||||||
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),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
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 获取门店订单列表(补全遗漏订单)
|
// ListOrders 获取门店订单列表(补全遗漏订单)
|
||||||
|
|||||||
@@ -319,7 +319,6 @@ func createTaoVegetable(ctx *jxcontext.Context, api *tao_vegetable.API, storeSku
|
|||||||
WarnDays: utils.Int64ToPointer(model.NO), // ? 0
|
WarnDays: utils.Int64ToPointer(model.NO), // ? 0
|
||||||
FixedFlag: utils.Int64ToPointer(model.NO), // ? 0
|
FixedFlag: utils.Int64ToPointer(model.NO), // ? 0
|
||||||
PurchaseSpec: utils.String2Pointer(utils.Int2Str(model.YES)), // ? 1
|
PurchaseSpec: utils.String2Pointer(utils.Int2Str(model.YES)), // ? 1
|
||||||
//PurchaseUnit: utils.String2Pointer(storeSku.Unit), // ? 同上
|
|
||||||
PurchaseUnit: utils.String2Pointer("份"), // ? 同上
|
PurchaseUnit: utils.String2Pointer("份"), // ? 同上
|
||||||
LabelStyleType: utils.String2Pointer(tao_vegetable.CreateLabelStyleType), // 库存单位
|
LabelStyleType: utils.String2Pointer(tao_vegetable.CreateLabelStyleType), // 库存单位
|
||||||
ItemTypeNew: utils.Int64ToPointer(tao_vegetable.CreateItemTypeNewVegetable),
|
ItemTypeNew: utils.Int64ToPointer(tao_vegetable.CreateItemTypeNewVegetable),
|
||||||
@@ -330,6 +329,8 @@ func createTaoVegetable(ctx *jxcontext.Context, api *tao_vegetable.API, storeSku
|
|||||||
TemporaryFlag: utils.Int64ToPointer(model.NO),
|
TemporaryFlag: utils.Int64ToPointer(model.NO),
|
||||||
IsOnline: utils.Int64ToPointer(tao_vegetable.CreateIsOnline),
|
IsOnline: utils.Int64ToPointer(tao_vegetable.CreateIsOnline),
|
||||||
MerchantCatCode: utils.String2Pointer(storeSku.VendorCatID), // 优先使用 靠后 category_code
|
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})
|
sku.SkuPicUrls = uploadImg(api, []string{storeSku.ImgOrigin, storeSku.Img, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5, storeSku.DescImg})
|
||||||
if sku.SkuPicUrls == nil {
|
if sku.SkuPicUrls == nil {
|
||||||
|
|||||||
@@ -636,6 +636,9 @@ func (c *OrderController) AdjustOrder() {
|
|||||||
func (c *OrderController) CancelOrder() {
|
func (c *OrderController) CancelOrder() {
|
||||||
c.callCancelOrder(func(params *tOrderCancelOrderParams) (retVal interface{}, errCode string, err error) {
|
c.callCancelOrder(func(params *tOrderCancelOrderParams) (retVal interface{}, errCode string, err error) {
|
||||||
order, err := partner.CurOrderManager.LoadOrder(params.VendorOrderID, params.VendorID)
|
order, err := partner.CurOrderManager.LoadOrder(params.VendorOrderID, params.VendorID)
|
||||||
|
if order.Status >= model.OrderStatusEndBegin {
|
||||||
|
return nil, "", fmt.Errorf("订单处于完成状态,不支持取消操作!请走售后流程")
|
||||||
|
}
|
||||||
if err == nil {
|
if err == nil {
|
||||||
err = defsch.FixedScheduler.CancelOrder(params.Ctx, order, params.Reason)
|
err = defsch.FixedScheduler.CancelOrder(params.Ctx, order, params.Reason)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user