Merge branch 'mark' into get-store
This commit is contained in:
@@ -236,29 +236,6 @@ func (c *OrderManager) SaveOrder(order *model.GoodsOrder, isAdjust bool, db *dao
|
||||
return isDuplicated, err
|
||||
}
|
||||
|
||||
func getPromotionSkuPriceMap(db *dao.DaoDB, storeID int, skuIDs []int) (skuPriceMap map[int64]*model.PromotionSku, err error) {
|
||||
sql := `
|
||||
SELECT t3.*
|
||||
FROM promotion t1
|
||||
JOIN promotion_store t2 ON t2.promotion_id = t1.id AND t2.store_id = ?
|
||||
JOIN promotion_sku t3 ON t3.promotion_id = t1.id AND t3.sku_id IN (` + dao.GenQuestionMarks(len(skuIDs)) + `) AND t3.earning_price > 0
|
||||
WHERE t1.deleted_at = ? AND (t1.status = ? OR t1.status = ?) AND (t1.begin_at <= NOW() AND t1.end_at >= NOW()) AND t1.vendor_id = ?`
|
||||
var skuPriceList []*model.PromotionSku
|
||||
if err = dao.GetRows(db, &skuPriceList, sql, storeID, skuIDs, utils.DefaultTimeValue, model.PromotionStatusLocalCreated, model.PromotionStatusRemoteCreated, model.VendorIDJX); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
skuPriceMap = make(map[int64]*model.PromotionSku)
|
||||
for _, v := range skuPriceList {
|
||||
if v.EarningPrice > 0 {
|
||||
index := jxutils.Combine2Int(v.SkuID, v.Price)
|
||||
if skuPriceMap[index] == nil || v.EarningPrice < skuPriceMap[index].EarningPrice {
|
||||
skuPriceMap[index] = v
|
||||
}
|
||||
}
|
||||
}
|
||||
return skuPriceMap, err
|
||||
}
|
||||
|
||||
func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao.DaoDB) (err error) {
|
||||
globals.SugarLogger.Debugf("updateOrderSkuOtherInfo orderID:%s, VendorStoreID:%s", order.VendorOrderID, order.VendorStoreID)
|
||||
jxStoreID := jxutils.GetShowStoreIDFromOrder(order)
|
||||
@@ -309,12 +286,14 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao.
|
||||
skumapper[v.VendorSkuID] = v
|
||||
}
|
||||
|
||||
skuPriceMap, err2 := getPromotionSkuPriceMap(db, jxStoreID, jxutils.IntMap2List(skuIDMap))
|
||||
if err = err2; err != nil {
|
||||
globals.SugarLogger.Errorf("updateOrderSkuOtherInfo can not get sku promotion info for orderID:%s, error:%v", order.VendorOrderID, err)
|
||||
return err
|
||||
var skuPriceMap map[int64]*dao.PromotionStoreSku
|
||||
if len(skuIDMap) > 0 {
|
||||
skuPriceMap, err = dao.GetPromotionSkuPriceMap(db, model.VendorIDJX, []int{jxStoreID}, jxutils.IntMap2List(skuIDMap), time.Now(), time.Now())
|
||||
if err != nil {
|
||||
globals.SugarLogger.Errorf("updateOrderSkuOtherInfo can not get sku promotion info for orderID:%s, error:%v", order.VendorOrderID, err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
for _, v := range orderSkus {
|
||||
v.VendorOrderID = order.VendorOrderID
|
||||
v.VendorID = order.VendorID
|
||||
@@ -335,10 +314,12 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao.
|
||||
}
|
||||
}
|
||||
|
||||
if skuID := jxutils.GetSkuIDFromOrderSku(v); skuID > 0 && v.StoreSubName != "" {
|
||||
index := jxutils.Combine2Int(jxStoreID, int(v.SalePrice))
|
||||
if skuPriceMap[index] != nil {
|
||||
v.EarningPrice = int64(skuPriceMap[index].EarningPrice)
|
||||
if skuPriceMap != nil {
|
||||
if skuID := jxutils.GetSkuIDFromOrderSku(v); skuID > 0 /*&& v.StoreSubName != ""*/ {
|
||||
index := dao.GenSkuPriceMapKey(jxStoreID, v.SkuID)
|
||||
if skuPriceMap[index] != nil && skuPriceMap[index].EarningPrice > 0 {
|
||||
v.EarningPrice = int64(skuPriceMap[index].EarningPrice)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -349,22 +330,37 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao.
|
||||
func (c *OrderManager) updateOrderOtherInfo(order *model.GoodsOrder, db *dao.DaoDB) (err error) {
|
||||
globals.SugarLogger.Debugf("updateOrderOtherInfo orderID:%s, VendorStoreID:%s", order.VendorOrderID, order.VendorStoreID)
|
||||
|
||||
storeMap := &model.StoreMap{
|
||||
VendorID: order.VendorID,
|
||||
VendorStoreID: order.VendorStoreID,
|
||||
payPercentage := 0
|
||||
storeDetail, err := dao.GetStoreDetailByVendorStoreID(db, order.VendorStoreID, order.VendorID)
|
||||
if err != nil {
|
||||
globals.SugarLogger.Warnf("updateOrderOtherInfo GetStoreDetailByVendorStoreID orderID:%s, VendorStoreID:%s, error:%v", order.VendorOrderID, order.VendorStoreID, err)
|
||||
if !dao.IsNoRowsError(err) {
|
||||
return err
|
||||
}
|
||||
err = nil
|
||||
} else {
|
||||
order.JxStoreID = storeDetail.Store.ID
|
||||
payPercentage = storeDetail.PayPercentage
|
||||
}
|
||||
storeMap.DeletedAt = utils.DefaultTimeValue
|
||||
if err = dao.GetEntity(db, storeMap, model.FieldVendorID, model.FieldVendorStoreID, model.FieldDeletedAt); err != nil && err != orm.ErrNoRows {
|
||||
globals.SugarLogger.Warnf("updateOrderOtherInfo GetEntity orderID:%s, VendorStoreID:%s, error:%v", order.VendorOrderID, order.VendorStoreID, err)
|
||||
return err
|
||||
}
|
||||
order.JxStoreID = storeMap.StoreID
|
||||
if err = c.updateOrderSkuOtherInfo(order, db); err == nil {
|
||||
jxutils.RefreshOrderSkuRelated(order)
|
||||
caculateOrderEarningPrice(order, payPercentage)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// 计算结算给门店的金额
|
||||
func caculateOrderEarningPrice(order *model.GoodsOrder, storePayPercentage int) {
|
||||
order.EarningPrice = 0
|
||||
for _, v := range order.Skus {
|
||||
skuEarningPrice := v.EarningPrice
|
||||
if skuEarningPrice == 0 {
|
||||
skuEarningPrice = jxutils.CaculateSkuEarningPrice(v.ShopPrice, v.SalePrice, storePayPercentage)
|
||||
}
|
||||
order.EarningPrice += skuEarningPrice * int64(v.Count)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *OrderManager) addOrderStatus(orderStatus *model.OrderStatus, db *dao.DaoDB) (isDuplicated bool, order *model.GoodsOrder, err error) {
|
||||
globals.SugarLogger.Debugf("addOrderStatus refOrderID:%s, orderID:%s", orderStatus.RefVendorOrderID, orderStatus.VendorOrderID)
|
||||
if db == nil {
|
||||
@@ -516,9 +512,18 @@ func (c *OrderManager) UpdateOrderStatusAndDeliveryFlag(order *model.GoodsOrder)
|
||||
}
|
||||
|
||||
func (c *OrderManager) UpdateOrderFields(order *model.GoodsOrder, fieldList []string) (err error) {
|
||||
db := orm.NewOrm()
|
||||
db := dao.GetDB()
|
||||
utils.CallFuncLogError(func() error {
|
||||
_, err = db.Update(order, fieldList...)
|
||||
if order.ID == 0 {
|
||||
order2 := *order
|
||||
if err = dao.GetEntity(db, &order2, model.FieldVendorOrderID, model.FieldVendorID); err == nil {
|
||||
order.ID = order2.ID
|
||||
}
|
||||
err = nil // 强制忽略订单不存在错误
|
||||
}
|
||||
if err == nil && order.ID != 0 {
|
||||
_, err = db.Db.Update(order, fieldList...)
|
||||
}
|
||||
return err
|
||||
}, "UpdateOrderFields orderID:%s failed with error:%v", order.VendorOrderID, err)
|
||||
return err
|
||||
|
||||
@@ -74,94 +74,66 @@ func (c *OrderManager) GetOrderSkuInfo(ctx *jxcontext.Context, vendorOrderID str
|
||||
if vendorID == model.VendorIDJD {
|
||||
fullSkuNameSQL = "CONCAT(t1.sku_name, IF(t3.is_spu = 1 AND LOCATE(';', t1.sku_name) = 0, CONCAT('[约', t2.spec_quality, t2.spec_unit, '/', t3.unit, ']'), ''))"
|
||||
}
|
||||
sql := fmt.Sprintf(`
|
||||
SELECT
|
||||
t1.id,
|
||||
t1.vendor_order_id,
|
||||
t1.vendor_id,
|
||||
t1.count,
|
||||
t1.vendor_sku_id,
|
||||
t1.sku_id,
|
||||
t1.jx_sku_id,
|
||||
t1.sku_name,
|
||||
IF(t1.shop_price = 0, t1.sale_price, t1.shop_price) shop_price,
|
||||
t1.sale_price,
|
||||
t1.earning_price,
|
||||
CAST(IF(t1.earning_price <> 0, t1.earning_price, IF(t1.shop_price <> 0 && t1.shop_price < t1.sale_price, t1.shop_price, t1.sale_price) * IF(t5.pay_percentage > 0, t5.pay_percentage, %d) / 100) AS SIGNED) real_earning_price,
|
||||
t1.weight,
|
||||
t1.sku_type,
|
||||
t1.promotion_type,
|
||||
t1.order_created_at,
|
||||
t1.store_sub_id,
|
||||
t1.store_sub_name,
|
||||
t1.vendor_price,
|
||||
%s full_sku_name,
|
||||
`, model.DefaultEarningPricePercentage, fullSkuNameSQL)
|
||||
db := dao.GetDB()
|
||||
if vendorID == model.VendorIDELM {
|
||||
err = dao.GetRows(db, &skus, fmt.Sprintf(`
|
||||
SELECT
|
||||
t1.id,
|
||||
t1.vendor_order_id,
|
||||
t1.vendor_id,
|
||||
t1.count,
|
||||
t1.vendor_sku_id,
|
||||
t1.sku_id,
|
||||
t1.jx_sku_id,
|
||||
t1.sku_name,
|
||||
IF(t1.shop_price = 0, t1.sale_price, t1.shop_price) shop_price,
|
||||
t1.sale_price,
|
||||
t1.earning_price,
|
||||
t1.weight,
|
||||
t1.sku_type,
|
||||
t1.promotion_type,
|
||||
t1.order_created_at,
|
||||
t1.store_sub_id,
|
||||
t1.store_sub_name,
|
||||
t1.vendor_price,
|
||||
IF(t3.img IS NULL OR t3.img = '', t4.col_imageUrl, t3.img) image, %s full_sku_name
|
||||
FROM order_sku t1
|
||||
LEFT JOIN sku t2 ON IF(t1.jx_sku_id != 0, t1.jx_sku_id, t1.sku_id) = t2.id/* AND t2.deleted_at = ?*/
|
||||
LEFT JOIN sku_name t3 ON t2.name_id = t3.id/* AND t3.deleted_at = ?*/
|
||||
LEFT JOIN ede_skus t4 ON t1.vendor_sku_id = t4.col_id
|
||||
WHERE vendor_order_id = ? AND vendor_id = ?
|
||||
ORDER BY t1.sku_name
|
||||
`, fullSkuNameSQL), /*, utils.DefaultTimeValue, utils.DefaultTimeValue*/ vendorOrderID, vendorID)
|
||||
err = dao.GetRows(db, &skus, sql+`
|
||||
IF(t3.img <> '', t3.img, t4.col_imageUrl) image
|
||||
FROM order_sku t1
|
||||
LEFT JOIN goods_order t6 ON t6.vendor_order_id = t1.vendor_order_id AND t6.vendor_id = t1.vendor_id
|
||||
LEFT JOIN store t5 ON t5.id = IF(t6.jx_store_id <> 0, t6.jx_store_id, t6.store_id)
|
||||
LEFT JOIN sku t2 ON IF(t1.jx_sku_id != 0, t1.jx_sku_id, t1.sku_id) = t2.id/* AND t2.deleted_at = ?*/
|
||||
LEFT JOIN sku_name t3 ON t2.name_id = t3.id/* AND t3.deleted_at = ?*/
|
||||
LEFT JOIN ede_skus t4 ON t1.vendor_sku_id = t4.col_id
|
||||
WHERE t1.vendor_order_id = ? AND t1.vendor_id = ?
|
||||
ORDER BY t1.sku_name
|
||||
`, /*, utils.DefaultTimeValue, utils.DefaultTimeValue*/ vendorOrderID, vendorID)
|
||||
} else if vendorID == model.VendorIDJD {
|
||||
err = dao.GetRows(db, &skus, fmt.Sprintf(`
|
||||
SELECT
|
||||
t1.id,
|
||||
t1.vendor_order_id,
|
||||
t1.vendor_id,
|
||||
t1.count,
|
||||
t1.vendor_sku_id,
|
||||
t1.sku_id,
|
||||
t1.jx_sku_id,
|
||||
t1.sku_name,
|
||||
IF(t1.shop_price = 0, t1.sale_price, t1.shop_price) shop_price,
|
||||
t1.sale_price,
|
||||
t1.earning_price,
|
||||
t1.weight,
|
||||
t1.sku_type,
|
||||
t1.promotion_type,
|
||||
t1.order_created_at,
|
||||
t1.store_sub_id,
|
||||
t1.store_sub_name,
|
||||
t1.vendor_price,
|
||||
IF(t3.img IS NULL OR t3.img = '', t4.image, t3.img) image, %s full_sku_name
|
||||
FROM order_sku t1
|
||||
LEFT JOIN sku t2 ON IF(t1.jx_sku_id != 0, t1.jx_sku_id, t1.sku_id) = t2.id/* AND t2.deleted_at = ?*/
|
||||
LEFT JOIN sku_name t3 ON t2.name_id = t3.id/* AND t3.deleted_at = ?*/
|
||||
LEFT JOIN jde_sku_infos t4 ON t1.vendor_sku_id = t4.skuId
|
||||
WHERE vendor_order_id = ? AND vendor_id = ?
|
||||
ORDER BY t1.sku_name
|
||||
`, fullSkuNameSQL), /*, utils.DefaultTimeValue, utils.DefaultTimeValue*/ vendorOrderID, vendorID)
|
||||
err = dao.GetRows(db, &skus, sql+`
|
||||
IF(t3.img <> '', t3.img, t4.image) image
|
||||
FROM order_sku t1
|
||||
LEFT JOIN goods_order t6 ON t6.vendor_order_id = t1.vendor_order_id AND t6.vendor_id = t1.vendor_id
|
||||
LEFT JOIN store t5 ON t5.id = IF(t6.jx_store_id <> 0, t6.jx_store_id, t6.store_id)
|
||||
LEFT JOIN sku t2 ON IF(t1.jx_sku_id != 0, t1.jx_sku_id, t1.sku_id) = t2.id/* AND t2.deleted_at = ?*/
|
||||
LEFT JOIN sku_name t3 ON t2.name_id = t3.id/* AND t3.deleted_at = ?*/
|
||||
LEFT JOIN jde_sku_infos t4 ON t1.vendor_sku_id = t4.skuId
|
||||
WHERE t1.vendor_order_id = ? AND t1.vendor_id = ?
|
||||
ORDER BY t1.sku_name
|
||||
`, /*, utils.DefaultTimeValue, utils.DefaultTimeValue*/ vendorOrderID, vendorID)
|
||||
}
|
||||
if err != nil || len(skus) == 0 {
|
||||
err = dao.GetRows(db, &skus, fmt.Sprintf(`
|
||||
SELECT
|
||||
t1.id,
|
||||
t1.vendor_order_id,
|
||||
t1.vendor_id,
|
||||
t1.count,
|
||||
t1.vendor_sku_id,
|
||||
t1.sku_id,
|
||||
t1.jx_sku_id,
|
||||
t1.sku_name,
|
||||
IF(t1.shop_price = 0, t1.sale_price, t1.shop_price) shop_price,
|
||||
t1.sale_price,
|
||||
t1.earning_price,
|
||||
t1.weight,
|
||||
t1.sku_type,
|
||||
t1.promotion_type,
|
||||
t1.order_created_at,
|
||||
t1.store_sub_id,
|
||||
t1.store_sub_name,
|
||||
t1.vendor_price,
|
||||
t3.img image, %s full_sku_name
|
||||
FROM order_sku t1
|
||||
LEFT JOIN sku t2 ON IF(t1.jx_sku_id != 0, t1.jx_sku_id, t1.sku_id) = t2.id/* AND t2.deleted_at = ?*/
|
||||
LEFT JOIN sku_name t3 ON t2.name_id = t3.id/* AND t3.deleted_at = ?*/
|
||||
WHERE t1.vendor_order_id = ? AND t1.vendor_id = ?
|
||||
ORDER BY t1.sku_name
|
||||
`, fullSkuNameSQL), /*, utils.DefaultTimeValue, utils.DefaultTimeValue*/ vendorOrderID, vendorID)
|
||||
err = dao.GetRows(db, &skus, sql+`
|
||||
t3.img image
|
||||
FROM order_sku t1
|
||||
LEFT JOIN goods_order t6 ON t6.vendor_order_id = t1.vendor_order_id AND t6.vendor_id = t1.vendor_id
|
||||
LEFT JOIN store t5 ON t5.id = IF(t6.jx_store_id <> 0, t6.jx_store_id, t6.store_id)
|
||||
LEFT JOIN sku t2 ON IF(t1.jx_sku_id != 0, t1.jx_sku_id, t1.sku_id) = t2.id/* AND t2.deleted_at = ?*/
|
||||
LEFT JOIN sku_name t3 ON t2.name_id = t3.id/* AND t3.deleted_at = ?*/
|
||||
WHERE t1.vendor_order_id = ? AND t1.vendor_id = ?
|
||||
ORDER BY t1.sku_name
|
||||
`, /*, utils.DefaultTimeValue, utils.DefaultTimeValue*/ vendorOrderID, vendorID)
|
||||
if err != nil {
|
||||
globals.SugarLogger.Infof("GetOrderSkuInfo orderID:%s vendorID:%d failed with error:%v", vendorOrderID, vendorID, err)
|
||||
return nil, err
|
||||
@@ -281,14 +253,18 @@ func (c *OrderManager) getOrders(ctx *jxcontext.Context, isIncludeSku bool, from
|
||||
if offset < 0 {
|
||||
offset = 0
|
||||
}
|
||||
sql := `
|
||||
sql := fmt.Sprintf(`
|
||||
SELECT SQL_CALC_FOUND_ROWS t1.*,
|
||||
CAST(IF(t1.shop_price <= t1.vendor_price, IF(t1.shop_price = 0, t1.sale_price, t1.shop_price), IF(t1.vendor_price = 0, t1.sale_price, t1.vendor_price))*IF(t5.pay_percentage IS NULL OR t5.pay_percentage <= 0, 70, t5.pay_percentage)/100 AS SIGNED) earning_price,
|
||||
CAST(IF(t1.earning_price <> 0, t1.earning_price, IF(t1.shop_price <> 0 && t1.shop_price < t1.sale_price, t1.shop_price, t1.sale_price) * IF(t5.pay_percentage > 0, t5.pay_percentage, %d) / 100) AS SIGNED) earning_price,
|
||||
t2.status waybill_status, t2.courier_name, t2.courier_mobile,
|
||||
t2.actual_fee, t2.desired_fee, t2.waybill_created_at, t2.waybill_finished_at`
|
||||
t2.actual_fee, t2.desired_fee, t2.waybill_created_at, t2.waybill_finished_at`, model.DefaultEarningPricePercentage)
|
||||
if isIncludeSku {
|
||||
sql += `,
|
||||
t3.sku_id, t3.count sku_count2, t3.shop_price sku_shop_price, IF(t3.earning_price <> 0, t3.earning_price, t3.sale_price) sku_sale_price`
|
||||
t3.sku_id,
|
||||
t3.count sku_count2,
|
||||
t3.shop_price sku_shop_price,
|
||||
t3.earning_price sku_earning_price,
|
||||
t3.sale_price sku_sale_price`
|
||||
}
|
||||
sql += `
|
||||
FROM goods_order t1
|
||||
@@ -475,6 +451,7 @@ func (c *OrderManager) ExportOrders(ctx *jxcontext.Context, fromDateStr, toDateS
|
||||
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
|
||||
@@ -780,14 +757,14 @@ func (c *OrderManager) GetStoresOrderSaleInfo(ctx *jxcontext.Context, storeIDLis
|
||||
return nil, fmt.Errorf("查询时间范围不能超过60天")
|
||||
}
|
||||
// 用int64类型去取float型的数据库返回值,会取不到
|
||||
sql := `
|
||||
sql := fmt.Sprintf(`
|
||||
SELECT IF(t1.jx_store_id > 0, t1.jx_store_id, t1.store_id) store_id, t1.vendor_id, IF(t1.status < ?, 0, t1.status) status,
|
||||
COUNT(*) count, SUM(t1.shop_price) shop_price, SUM(t1.vendor_price) vendor_price, SUM(t1.sale_price) sale_price, SUM(t1.actual_pay_price) actual_pay_price,
|
||||
CAST(SUM(IF(t1.shop_price <= t1.vendor_price, IF(t1.shop_price = 0, t1.sale_price, t1.shop_price), IF(t1.vendor_price = 0, t1.sale_price, t1.vendor_price))*IF(t5.pay_percentage IS NULL OR t5.pay_percentage <= 0, 70, t5.pay_percentage)/100) AS SIGNED) earning_price
|
||||
CAST(SUM(IF(t1.earning_price <> 0, t1.earning_price, IF(t1.shop_price <> 0 && t1.shop_price < t1.sale_price, t1.shop_price, t1.sale_price) * IF(t5.pay_percentage > 0, t5.pay_percentage, %d) / 100)) AS SIGNED) earning_price
|
||||
FROM goods_order t1
|
||||
LEFT JOIN store t5 ON t5.id = IF(t1.jx_store_id <> 0, t1.jx_store_id, t1.store_id)
|
||||
WHERE t1.order_created_at >= ? AND t1.order_created_at <= ?
|
||||
`
|
||||
`, model.DefaultEarningPricePercentage)
|
||||
sqlParams := []interface{}{
|
||||
model.OrderStatusEndBegin,
|
||||
fromTime,
|
||||
|
||||
Reference in New Issue
Block a user