- 导出订单时(ExportOrders),将售后单的商品去除

This commit is contained in:
gazebo
2019-07-03 17:17:59 +08:00
parent 37ba00c47e
commit da882a7cf5
2 changed files with 91 additions and 19 deletions

View File

@@ -260,7 +260,7 @@ func (c *OrderManager) getOrders(ctx *jxcontext.Context, isIncludeSku bool, from
t2.actual_fee, t2.desired_fee, t2.waybill_created_at, t2.waybill_finished_at`, model.DefaultEarningPricePercentage)
if isIncludeSku {
sql += `,
t3.sku_id,
IF(t3.jx_sku_id > 0, t3.jx_sku_id, t3.sku_id) sku_id,
t3.count sku_count2,
t3.shop_price sku_shop_price,
t3.earning_price sku_earning_price,
@@ -299,6 +299,9 @@ func (c *OrderManager) getOrders(ctx *jxcontext.Context, isIncludeSku bool, from
if err = err2; err != nil {
return nil, 0, err
}
if utils.IsTimeZero(fromDate) {
return nil, 0, fmt.Errorf("在没有指定订单号时,必须指定查询日期范围")
}
if toDateStr == "" {
toDateStr = fromDateStr
}
@@ -437,6 +440,7 @@ func (c *OrderManager) ExportOrders(ctx *jxcontext.Context, fromDateStr, toDateS
var (
orders, orders2 []*model.GoodsOrderExt
order *model.GoodsOrderExt
afsSkuMap map[string]map[int]*model.OrderSkuFinancial
excelBin []byte
)
task := tasksch.NewSeqTask("导出订单SKU信息", ctx,
@@ -445,25 +449,39 @@ func (c *OrderManager) ExportOrders(ctx *jxcontext.Context, fromDateStr, toDateS
case 0:
orders, _, err = c.getOrders(ctx, true, fromDateStr, toDateStr, mapParams, 0, -1)
case 1:
afsSkuMap, err = c.getAfsOrderSkuInfo4ExportOrders(ctx, fromDateStr, toDateStr)
case 2:
for _, v := range orders {
skuStr := strings.Join([]string{
utils.Int2Str(v.SkuID),
utils.Int2Str(v.SkuCount2),
utils.Int2Str(v.SkuShopPrice),
utils.Int2Str(v.SkuSalePrice),
utils.Int2Str(v.SkuEarningPrice),
}, ",")
if order == nil || v.ID != order.ID {
order = v
v.CourierVendorName = model.VendorChineseNames[v.WaybillVendorID]
v.Status2 = model.OrderStatusName[v.Status]
v.SkuInfo = skuStr
orders2 = append(orders2, v)
} else {
order.SkuInfo += ";" + skuStr
if afsInfo := afsSkuMap[jxutils.ComposeUniversalOrderID(v.VendorOrderID, v.VendorID)]; afsInfo != nil {
if afsInfo[v.SkuID] != nil && afsInfo[v.SkuID].Count > 0 {
minus := afsInfo[v.SkuID].Count
if minus > v.SkuCount2 {
minus = v.SkuCount2
}
v.SkuCount2 -= minus
afsInfo[v.SkuID].Count -= minus
}
}
if v.SkuCount2 > 0 {
skuStr := strings.Join([]string{
utils.Int2Str(v.SkuID),
utils.Int2Str(v.SkuCount2),
utils.Int2Str(v.SkuShopPrice),
utils.Int2Str(v.SkuSalePrice),
utils.Int2Str(v.SkuEarningPrice),
}, ",")
if order == nil || v.ID != order.ID {
order = v
v.CourierVendorName = model.VendorChineseNames[v.WaybillVendorID]
v.Status2 = model.OrderStatusName[v.Status]
v.SkuInfo = skuStr
orders2 = append(orders2, v)
} else {
order.SkuInfo += ";" + skuStr
}
}
}
case 2:
case 3:
excelConf := &excel.Obj2ExcelSheetConfig{
Title: "订单导出",
Data: orders2,
@@ -503,7 +521,7 @@ func (c *OrderManager) ExportOrders(ctx *jxcontext.Context, fromDateStr, toDateS
},
}
excelBin = excel.Obj2Excel([]*excel.Obj2ExcelSheetConfig{excelConf})
case 3:
case 4:
keyPart := []string{
ctx.GetUserName(),
}
@@ -522,7 +540,7 @@ func (c *OrderManager) ExportOrders(ctx *jxcontext.Context, fromDateStr, toDateS
globals.SugarLogger.Debugf("导出订单SKU信息excelURL:%s, err:%v", excelURL, err)
}
return nil, err
}, 4)
}, 5)
tasksch.ManageTask(task).Run()
hint = task.GetID()
return hint, err
@@ -881,6 +899,53 @@ func (c *OrderManager) GetAfsOrderSkuInfo(ctx *jxcontext.Context, afsOrderID str
return skus, err
}
func (c *OrderManager) getAfsOrderSkuInfo4ExportOrders(ctx *jxcontext.Context, fromDateStr, toDateStr string) (skuMap map[string]map[int]*model.OrderSkuFinancial, err error) {
fromDate, err2 := utils.TryStr2Time(fromDateStr)
if err = err2; err != nil {
return nil, err
}
if utils.IsTimeZero(fromDate) {
return nil, fmt.Errorf("在没有指定订单号时,必须指定查询日期范围")
}
if toDateStr == "" {
toDateStr = fromDateStr
}
toDate, err2 := utils.TryStr2Time(toDateStr)
if err = err2; err != nil {
return nil, err
}
toDate = toDate.Add(7 * 24 * time.Hour) // todo 售后单最多只可能延后7天吧
sql := `
SELECT t2.*
FROM afs_order t1
JOIN order_sku_financial t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id AND t2.is_afs_order = 1
WHERE t1.afs_created_at >= ? AND t1.afs_created_at <= ? AND t1.status = ?
`
sqlParams := []interface{}{
fromDate,
toDate,
model.AfsOrderStatusFinished,
}
var skus []*model.OrderSkuFinancial
if err = dao.GetRows(dao.GetDB(), &skus, sql, sqlParams...); err == nil {
skuMap = make(map[string]map[int]*model.OrderSkuFinancial)
for _, v := range skus {
key := jxutils.ComposeUniversalOrderID(v.VendorOrderID, v.VendorID)
if skuMap[key] == nil {
skuMap[key] = make(map[int]*model.OrderSkuFinancial)
}
if skuID := jxutils.GetSkuIDFromOrderSkuFinancial(v); skuID > 0 {
if skuMap[key][skuID] == nil {
skuMap[key][skuID] = v
} else {
skuMap[key][skuID].Count += v.Count
}
}
}
}
return skuMap, err
}
func (c *OrderManager) GetStoreAfsOrderCountInfo(ctx *jxcontext.Context, storeID, lastHours int) (countInfo []*model.GoodsOrderCountInfo, err error) {
globals.SugarLogger.Debugf("GetStoreAfsOrderCountInfo storeID:%d", storeID)
if lastHours > maxLastHours {

View File

@@ -113,6 +113,13 @@ func GetSaleStoreIDFromAfsOrder(order *model.AfsOrder) (retVal int) {
return order.StoreID
}
func GetSkuIDFromOrderSkuFinancial(sku *model.OrderSkuFinancial) (skuID int) {
if sku.JxSkuID > 0 {
return sku.JxSkuID
}
return sku.SkuID
}
func SplitUniversalOrderID(universalOrderID string) (orderID string, vendorID int) {
index := strings.Index(universalOrderID, "|")
if index != -1 {