989 lines
36 KiB
Go
989 lines
36 KiB
Go
package dao
|
||
|
||
import (
|
||
"fmt"
|
||
"strconv"
|
||
"time"
|
||
|
||
"git.rosy.net.cn/baseapi/utils"
|
||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||
"git.rosy.net.cn/jx-callback/business/model"
|
||
"git.rosy.net.cn/jx-callback/globals"
|
||
)
|
||
|
||
const (
|
||
AfsOrderStatus = -1
|
||
)
|
||
|
||
type StoresOrderSaleInfo struct {
|
||
StoreID int `orm:"column(store_id)" json:"storeID"`
|
||
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
||
Status int `json:"status"`
|
||
Count int `json:"count"`
|
||
ShopPrice int64 `json:"shopPrice"`
|
||
VendorPrice int64 `json:"vendorPrice"`
|
||
SalePrice int64 `json:"salePrice"`
|
||
ActualPayPrice int64 `json:"actualPayPrice"`
|
||
|
||
EarningPrice int64 `json:"earningPrice"` // 预估结算给门店老板的钱
|
||
}
|
||
|
||
type OrderSkuWithActualPayPrice struct {
|
||
model.OrderSku
|
||
|
||
ActualPayPrice int64 `json:"actualPayPrice"` // 单位为分 顾客实际支付
|
||
|
||
StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid
|
||
Status int `json:"status"` // 参见OrderStatus*相关的常量定义
|
||
|
||
PayPercentage int `json:"payPercentage"`
|
||
}
|
||
|
||
type tGoodsAndOrder struct {
|
||
model.GoodsOrder
|
||
OrderSkuID int64 `orm:"column(order_sku_id)" json:"orderSkuID"`
|
||
StoreSubID int `orm:"column(store_sub_id)" json:"storeSubID"` // 当前这个字段被当成结算活动ID用
|
||
StoreSubName string `orm:"size(64)" json:"storeSubName"` // 当前这个字段被用作vendorActType
|
||
Count int `json:"count"`
|
||
VendorSkuID string `orm:"column(vendor_sku_id);size(48)" json:"vendorSkuID"`
|
||
SkuID int `orm:"column(sku_id)" json:"skuID"` // 外部系统里记录的 jxskuid
|
||
JxSkuID int `orm:"column(jx_sku_id)" json:"jxSkuID"` // 根据VendorSkuID在本地系统里查询出来的 jxskuid
|
||
SkuName string `orm:"size(255)" json:"skuName"`
|
||
SkuShopPrice int64 `json:"shopPrice"` // 京西价
|
||
SkuVendorPrice int64 `json:"vendorPrice"` // 平台价
|
||
SkuSalePrice int64 `json:"salePrice"` // 售卖价
|
||
SkuEarningPrice int64 `json:"earningPrice"` // 活动商品设置,结算给门店老板的钱,如果结算活动ID为0,是按结算比例算的,否则就是结算表中的值
|
||
Weight int `json:"weight"` // 单位为克
|
||
SkuType int `json:"skuType"` // 当前如果为gift就为1,否则缺省为0
|
||
PromotionType int `json:"promotionType"` // todo 当前是用于记录京东的PromotionType(生成jxorder用),没有做转换
|
||
}
|
||
|
||
//actID指结算活动的id
|
||
func QueryOrders(db *DaoDB, vendorOrderID string, actID int, vendorIDs []int, storeID int, fromDate, toDate time.Time) (orderList []*model.GoodsOrder, err error) {
|
||
sqlParams := []interface{}{}
|
||
var (
|
||
orderNewList []*tGoodsAndOrder
|
||
orderNewMap map[string][]*model.OrderSku
|
||
)
|
||
sql := `
|
||
SELECT a.*,
|
||
b.id order_sku_id, b.store_sub_id, b.store_sub_name, b.count, b.vendor_sku_id, b.sku_id, b.jx_sku_id, b.sku_name, b.shop_price sku_shop_price,
|
||
b.vendor_price sku_vendor_price, b.sale_price sku_sale_price, b.earning_price sku_earning_price, b.weight, b.sku_type, b.promotion_type
|
||
FROM goods_order a
|
||
JOIN order_sku b ON a.vendor_order_id = b.vendor_order_id
|
||
`
|
||
if actID > 0 {
|
||
sql += `
|
||
JOIN ( SELECT t4.vendor_order_id, t4.vendor_id
|
||
FROM act t1
|
||
JOIN act_store_sku t2 ON t2.act_id = t1.id
|
||
JOIN order_sku t3 ON t3.sku_id = t2.sku_id
|
||
JOIN goods_order t4 ON t4.vendor_order_id = t3.vendor_order_id
|
||
AND t4.vendor_id = t3.vendor_id
|
||
AND t2.store_id = IF(t4.jx_store_id <> 0, t4.jx_store_id, t4.store_id)
|
||
AND t4.order_created_at BETWEEN t1.begin_at AND t1.end_at
|
||
WHERE t1.status = 1
|
||
AND t1.id = ?
|
||
GROUP BY 1,2
|
||
)s ON s.vendor_order_id = a.vendor_order_id AND s.vendor_id = a.vendor_id
|
||
`
|
||
sqlParams = append(sqlParams, actID)
|
||
}
|
||
sql += `
|
||
WHERE 1=1
|
||
`
|
||
if vendorOrderID != "" {
|
||
sql += " AND a.vendor_order_id = ?"
|
||
sqlParams = append(sqlParams, vendorOrderID)
|
||
}
|
||
if len(vendorIDs) > 0 {
|
||
sql += " AND a.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
|
||
sqlParams = append(sqlParams, vendorIDs)
|
||
}
|
||
if storeID > 0 {
|
||
sql += " AND IF(a.jx_store_id <> 0, a.jx_store_id, a.store_id) = ?"
|
||
sqlParams = append(sqlParams, storeID)
|
||
}
|
||
if !utils.IsTimeZero(fromDate) && !utils.IsTimeZero(toDate) {
|
||
sql += " AND a.order_created_at BETWEEN ? and ?"
|
||
sqlParams = append(sqlParams, fromDate, toDate)
|
||
}
|
||
err = GetRows(db, &orderNewList, sql, sqlParams...)
|
||
if len(orderNewList) > 0 {
|
||
orderNewMap = make(map[string][]*model.OrderSku)
|
||
for _, v := range orderNewList {
|
||
if orderNewMap[v.VendorOrderID] == nil {
|
||
orderList = append(orderList, &v.GoodsOrder)
|
||
}
|
||
orderNewMap[v.VendorOrderID] = append(orderNewMap[v.VendorOrderID], &model.OrderSku{
|
||
ID: v.OrderSkuID,
|
||
VendorOrderID: v.VendorOrderID,
|
||
VendorID: v.VendorID,
|
||
StoreSubID: v.StoreSubID,
|
||
StoreSubName: v.StoreSubName,
|
||
Count: v.Count,
|
||
VendorSkuID: v.VendorSkuID,
|
||
SkuID: v.SkuID,
|
||
JxSkuID: v.JxSkuID,
|
||
SkuName: v.SkuName,
|
||
ShopPrice: v.SkuShopPrice,
|
||
VendorPrice: v.SkuVendorPrice,
|
||
SalePrice: v.SkuSalePrice,
|
||
EarningPrice: v.SkuEarningPrice,
|
||
Weight: v.Weight,
|
||
SkuType: v.SkuType,
|
||
PromotionType: v.PromotionType,
|
||
})
|
||
}
|
||
for _, v := range orderList {
|
||
v.Skus = orderNewMap[v.VendorOrderID]
|
||
}
|
||
}
|
||
|
||
return orderList, err
|
||
}
|
||
|
||
// func QueryOrders(db *DaoDB, vendorOrderID string, vendorIDs []int, storeID int, orderCreatedAtBegin, orderCreatedAtEnd time.Time) (orderList []*model.GoodsOrder, err error) {
|
||
// sql := `
|
||
// SELECT t1.*
|
||
// FROM goods_order t1
|
||
// WHERE t1.order_created_at >= ?`
|
||
// sqlParams := []interface{}{
|
||
// orderCreatedAtBegin,
|
||
// }
|
||
// if vendorOrderID != "" {
|
||
// sql += " AND t1.vendor_order_id = ?"
|
||
// sqlParams = append(sqlParams, vendorOrderID)
|
||
// }
|
||
// if len(vendorIDs) > 0 {
|
||
// sql += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
|
||
// sqlParams = append(sqlParams, vendorIDs)
|
||
// }
|
||
// if storeID > 0 {
|
||
// sql += " AND IF(t1.jx_store_id <> 0, t1.jx_store_id, t1.store_id) = ?"
|
||
// sqlParams = append(sqlParams, storeID)
|
||
// }
|
||
// if !utils.IsTimeZero(orderCreatedAtEnd) {
|
||
// sql += " AND t1.order_created_at <= ?"
|
||
// sqlParams = append(sqlParams, orderCreatedAtEnd)
|
||
// }
|
||
// // sql += " ORDER BY t1.order_created_at DESC, t1.id DESC;"
|
||
// return orderList, GetRows(db, &orderList, sql, sqlParams...)
|
||
// }
|
||
|
||
func GetStoreOrderAfterTime(db *DaoDB, storeID int, orderTime time.Time, lastOrderSeqID int64) (orderList []*model.GoodsOrderExt, err error) {
|
||
sql := `
|
||
SELECT t1.*,
|
||
t2.status waybill_status, t2.courier_name, t2.courier_mobile,
|
||
t2.actual_fee, t2.desired_fee, t2.waybill_created_at, t2.waybill_finished_at
|
||
FROM goods_order t1
|
||
LEFT JOIN waybill t2 ON t1.vendor_waybill_id = t2.vendor_waybill_id AND t1.waybill_vendor_id = t2.waybill_vendor_id
|
||
WHERE IF(t1.jx_store_id <> 0, t1.jx_store_id, t1.store_id) = ? AND t1.order_created_at >= ? AND t1.id > ? AND t1.status < ?
|
||
AND (t1.flag & ?) = 0
|
||
ORDER BY t1.order_created_at DESC, t1.id DESC;
|
||
`
|
||
sqlParams := []interface{}{
|
||
storeID,
|
||
orderTime,
|
||
lastOrderSeqID,
|
||
model.OrderStatusEndBegin,
|
||
model.OrderFlagMaskFake,
|
||
}
|
||
return orderList, GetRows(db, &orderList, sql, sqlParams...)
|
||
}
|
||
|
||
func SetOrderPrintFlag(db *DaoDB, userName string, vendorOrderID string, vendorID int, isPrinted bool) (err error) {
|
||
if isPrinted {
|
||
err = SetOrderFlag(db, userName, vendorOrderID, vendorID, model.OrderFlagMaskPrinted)
|
||
} else {
|
||
err = SetOrderFlag(db, userName, vendorOrderID, vendorID, ^model.OrderFlagMaskPrinted)
|
||
}
|
||
return err
|
||
}
|
||
|
||
func SetOrderFlag(db *DaoDB, userName string, vendorOrderID string, vendorID int, flag int) (err error) {
|
||
_, err = ExecuteSQL(db, `
|
||
UPDATE goods_order
|
||
SET flag = flag | ?
|
||
WHERE vendor_order_id = ? AND vendor_id = ?
|
||
`, flag, vendorOrderID, vendorID)
|
||
return err
|
||
}
|
||
|
||
func ClearOrderFlag(db *DaoDB, userName string, vendorOrderID string, vendorID int, flag int) (err error) {
|
||
_, err = ExecuteSQL(db, `
|
||
UPDATE goods_order
|
||
SET flag = flag & ?
|
||
WHERE vendor_order_id = ? AND vendor_id = ?
|
||
`, flag, vendorOrderID, vendorID)
|
||
return err
|
||
}
|
||
|
||
func SetAfsOrderFlag(db *DaoDB, userName string, afsOrderID string, vendorID int, flag int) (err error) {
|
||
_, err = ExecuteSQL(db, `
|
||
UPDATE afs_order
|
||
SET flag = flag | ?
|
||
WHERE afs_order_id = ? AND vendor_id = ?
|
||
`, flag, afsOrderID, vendorID)
|
||
return err
|
||
}
|
||
|
||
func GetAfsOrders(db *DaoDB, vendorID int, vendorOrderID, afsOrderID string) (afsOrderList []*model.AfsOrder, err error) {
|
||
sql := `
|
||
SELECT *
|
||
FROM afs_order t1
|
||
WHERE t1.vendor_id = ?
|
||
`
|
||
sqlParams := []interface{}{
|
||
vendorID,
|
||
}
|
||
if vendorOrderID != "" {
|
||
sql += " AND t1.vendor_order_id = ?"
|
||
sqlParams = append(sqlParams, vendorOrderID)
|
||
}
|
||
if afsOrderID != "" {
|
||
sql += " AND t1.afs_order_id = ?"
|
||
sqlParams = append(sqlParams, afsOrderID)
|
||
}
|
||
sql += " ORDER BY t1.afs_order_id DESC"
|
||
err = GetRows(db, &afsOrderList, sql, sqlParams...)
|
||
return afsOrderList, err
|
||
}
|
||
|
||
// 时间范围是订单完成时间
|
||
func GetStoresOrderSaleInfo(db *DaoDB, storeIDList []int, fromTime time.Time, toTime time.Time, statusList []int) (saleInfoList []*StoresOrderSaleInfo, err error) {
|
||
if utils.IsTimeZero(fromTime) {
|
||
return nil, fmt.Errorf("查询订单信息必须指定起始时间")
|
||
}
|
||
if utils.IsTimeZero(toTime) {
|
||
toTime = time.Now()
|
||
}
|
||
if toTime.Sub(fromTime) > time.Hour*24*60 {
|
||
return nil, fmt.Errorf("查询时间范围不能超过60天")
|
||
}
|
||
|
||
// 用int64类型去取float型的数据库返回值,会取不到
|
||
// order_finished_at
|
||
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.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,
|
||
toTime,
|
||
}
|
||
if len(storeIDList) > 0 {
|
||
sql += " AND IF(t1.jx_store_id > 0, t1.jx_store_id, t1.store_id) IN (" + GenQuestionMarks(len(storeIDList)) + ")"
|
||
sqlParams = append(sqlParams, storeIDList)
|
||
}
|
||
if len(statusList) > 0 {
|
||
sql += " AND t1.status IN (" + GenQuestionMarks(len(statusList)) + ")"
|
||
sqlParams = append(sqlParams, statusList)
|
||
}
|
||
sql += `
|
||
GROUP BY 1,2,3`
|
||
sql += fmt.Sprintf(`
|
||
UNION
|
||
SELECT IF(t0.jx_store_id > 0, t0.jx_store_id, t0.store_id) store_id, t0.vendor_id, -1 status,
|
||
COUNT(DISTINCT(t0.id)) count, SUM(t1.shop_price) shop_price, SUM(t1.vendor_price) vendor_price, SUM(t1.sale_price) sale_price, 0 actual_pay_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 afs_order t0
|
||
JOIN order_sku_financial t2 ON t2.afs_order_id = t0.afs_order_id AND t2.vendor_id = t0.vendor_id AND t2.is_afs_order = 1
|
||
JOIN order_sku t1 ON t1.vendor_order_id = t2.vendor_order_id AND t1.vendor_id = t2.vendor_id AND t1.sku_id = t2.sku_id
|
||
LEFT JOIN store t5 ON t5.id = IF(t0.jx_store_id <> 0, t0.jx_store_id, t0.store_id)
|
||
WHERE t0.afs_finished_at >= ? AND t0.afs_finished_at <= ?`, model.DefaultEarningPricePercentage)
|
||
sqlParams = append(sqlParams, []interface{}{
|
||
fromTime,
|
||
toTime,
|
||
})
|
||
if len(storeIDList) > 0 {
|
||
sql += " AND IF(t0.jx_store_id > 0, t0.jx_store_id, t0.store_id) IN (" + GenQuestionMarks(len(storeIDList)) + ")"
|
||
sqlParams = append(sqlParams, storeIDList)
|
||
}
|
||
sql += `
|
||
GROUP BY 1,2,3`
|
||
|
||
sql += " ORDER BY 1,2,3"
|
||
// globals.SugarLogger.Debug(sql)
|
||
err = GetRows(db, &saleInfoList, sql, sqlParams...)
|
||
return saleInfoList, err
|
||
}
|
||
|
||
func GetAfsOrderSkuInfo(db *DaoDB, vendorOrderID, afsOrderID string, vendorID int) (skus []*model.OrderFinancialSkuExt, err error) {
|
||
if vendorOrderID == "" && afsOrderID == "" {
|
||
return nil, fmt.Errorf("必须指定订单或售后单ID")
|
||
}
|
||
sql := `
|
||
SELECT t1.*, t3.img image
|
||
FROM order_sku_financial t1
|
||
LEFT JOIN sku t2 ON t2.id = IF(t1.jx_sku_id <> 0, t1.jx_sku_id, t1.sku_id)
|
||
LEFT JOIN sku_name t3 ON t3.id = t2.name_id
|
||
WHERE t1.is_afs_order = 1 AND t1.vendor_id = ?`
|
||
sqlParams := []interface{}{
|
||
vendorID,
|
||
}
|
||
|
||
if vendorOrderID != "" {
|
||
sql += " AND t1.vendor_order_id = ?"
|
||
sqlParams = append(sqlParams, vendorOrderID)
|
||
}
|
||
if afsOrderID != "" {
|
||
sql += " AND t1.afs_order_id = ?"
|
||
sqlParams = append(sqlParams, afsOrderID)
|
||
}
|
||
|
||
err = GetRows(db, &skus, sql, sqlParams...)
|
||
return skus, err
|
||
}
|
||
|
||
func GetStoreOrderSkuList(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAtEnd time.Time, statusList []int) (skuList []*OrderSkuWithActualPayPrice, err error) {
|
||
// order_finished_at
|
||
sql := `
|
||
SELECT t1.*,
|
||
t2.actual_pay_price, t2.status, IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) store_id,
|
||
t3.pay_percentage
|
||
FROM order_sku t1
|
||
JOIN goods_order t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id
|
||
LEFT JOIN store t3 ON t3.id = IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id)
|
||
WHERE t2.order_created_at >= ? AND t2.order_created_at <= ?`
|
||
sqlParams := []interface{}{
|
||
finishedAtBegin,
|
||
finishedAtEnd,
|
||
}
|
||
if len(storeIDs) > 0 {
|
||
sql += " AND IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||
sqlParams = append(sqlParams, storeIDs)
|
||
}
|
||
if len(statusList) > 0 {
|
||
sql += " AND t2.status IN (" + GenQuestionMarks(len(statusList)) + ")"
|
||
sqlParams = append(sqlParams, statusList)
|
||
}
|
||
err = GetRows(db, &skuList, sql, sqlParams...)
|
||
return skuList, err
|
||
}
|
||
|
||
func GetStoreOrderSkuList4Afs(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAtEnd time.Time) (skuList []*OrderSkuWithActualPayPrice, err error) {
|
||
sql := `
|
||
SELECT t1.*,
|
||
t2.actual_pay_price, t2.status, IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) store_id,
|
||
t3.pay_percentage
|
||
FROM order_sku t1
|
||
JOIN goods_order t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id
|
||
LEFT JOIN store t3 ON t3.id = IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id)
|
||
JOIN (
|
||
SELECT t12.*
|
||
FROM afs_order t12
|
||
WHERE IF(t12.jx_store_id > 0, t12.jx_store_id, t12.store_id) IN (` + GenQuestionMarks(len(storeIDs)) + `) AND t12.afs_finished_at >= ? AND t12.afs_finished_at <= ?
|
||
) t4 ON t4.vendor_order_id = t2.vendor_order_id AND t4.vendor_id = t2.vendor_id`
|
||
sqlParams := []interface{}{
|
||
storeIDs,
|
||
finishedAtBegin,
|
||
finishedAtEnd,
|
||
}
|
||
err = GetRows(db, &skuList, sql, sqlParams...)
|
||
return skuList, err
|
||
}
|
||
|
||
func GetStoreAfsOrderSkuList(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAtEnd time.Time, statusList []int) (afsSkuList []*model.OrderSkuFinancial, err error) {
|
||
sql := `
|
||
SELECT t1.*
|
||
FROM order_sku_financial t1
|
||
JOIN afs_order t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id
|
||
WHERE t1.is_afs_order = 1 AND t2.afs_finished_at >= ? AND t2.afs_finished_at <= ?`
|
||
sqlParams := []interface{}{
|
||
finishedAtBegin,
|
||
finishedAtEnd,
|
||
}
|
||
if len(storeIDs) > 0 {
|
||
sql += " AND IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||
sqlParams = append(sqlParams, storeIDs)
|
||
}
|
||
if len(statusList) > 0 {
|
||
sql += " AND t2.status IN (" + GenQuestionMarks(len(statusList)) + ")"
|
||
sqlParams = append(sqlParams, statusList)
|
||
}
|
||
err = GetRows(db, &afsSkuList, sql, sqlParams...)
|
||
return afsSkuList, err
|
||
}
|
||
|
||
func GetDailyFinishOrderList(db *DaoDB, storeID int, dateTime time.Time) (orderList []*model.OrderPickupTime, err error) {
|
||
sql := `
|
||
SELECT t2.status_time, t1.pick_deadline
|
||
FROM goods_order t1
|
||
JOIN order_status t2 ON t1.vendor_order_id = t2.vendor_order_id AND t1.vendor_id = t2.vendor_id
|
||
WHERE t1.jx_store_id = ? AND t2.order_type = ? AND t2.status = ? AND DATE(t1.order_finished_at) = DATE(?)
|
||
`
|
||
sqlParams := []interface{}{
|
||
storeID,
|
||
model.OrderTypeOrder,
|
||
model.OrderStatusFinishedPickup,
|
||
dateTime,
|
||
}
|
||
return orderList, GetRows(db, &orderList, sql, sqlParams...)
|
||
}
|
||
|
||
func GetDailyBadCommentOrderCount(db *DaoDB, dateTime time.Time) (storeCountList []*model.StoreCount, err error) {
|
||
beginTime, endTime := utils.GetTimeRange(dateTime, 1, true)
|
||
return GetBadCommentOrderCount(db, beginTime, endTime)
|
||
}
|
||
|
||
func GetBadCommentOrderCountByDayNum(db *DaoDB, dayNum int, includeToday bool) (storeCountList []*model.StoreCount, err error) {
|
||
beginTime, endTime := utils.GetTimeRange(utils.GetCurDate(), dayNum, includeToday)
|
||
return GetBadCommentOrderCount(db, beginTime, endTime)
|
||
}
|
||
|
||
func GetBadCommentOrderCount(db *DaoDB, beginTime, endTime time.Time) (storeCountList []*model.StoreCount, err error) {
|
||
sql := `
|
||
SELECT jxstoreid store_id, COUNT(*) count
|
||
FROM jx_bad_comments
|
||
WHERE createtime >= ? AND createtime <= ?
|
||
GROUP BY jxstoreid
|
||
`
|
||
sqlParams := []interface{}{
|
||
beginTime,
|
||
endTime,
|
||
}
|
||
err = GetRows(db, &storeCountList, sql, sqlParams)
|
||
|
||
return storeCountList, err
|
||
}
|
||
|
||
func GetDailyUnFinishOrderCount(db *DaoDB, dateTime time.Time) (storeCountList []*model.StoreCount, err error) {
|
||
beginTime, endTime := utils.GetTimeRange(dateTime, 1, true)
|
||
return GetUnFinishOrderCount(db, beginTime, endTime)
|
||
}
|
||
|
||
func GetDailyFinishOrderCount(db *DaoDB, dateTime time.Time) (storeCountList []*model.StoreCount, err error) {
|
||
beginTime, endTime := utils.GetTimeRange(dateTime, 1, true)
|
||
return GetFinishOrderCount(db, beginTime, endTime)
|
||
}
|
||
|
||
func GetDailyAbsentGoodsOrderCount(db *DaoDB, dateTime time.Time) (storeCountList []*model.StoreCount, err error) {
|
||
beginTime, endTime := utils.GetTimeRange(dateTime, 1, true)
|
||
return GetAbsentGoodsOrderCount(db, beginTime, endTime)
|
||
}
|
||
|
||
func GetUnFinishOrderCount(db *DaoDB, beginTime, endTime time.Time) (storeCountList []*model.StoreCount, err error) {
|
||
return GetEndOrderCount(db, []int{model.OrderStatusCanceled}, false, beginTime, endTime)
|
||
}
|
||
|
||
func GetFinishOrderCount(db *DaoDB, beginTime, endTime time.Time) (storeCountList []*model.StoreCount, err error) {
|
||
return GetEndOrderCount(db, []int{model.OrderStatusFinished}, false, beginTime, endTime)
|
||
}
|
||
|
||
func GetAbsentGoodsOrderCount(db *DaoDB, beginTime, endTime time.Time) (storeCountList []*model.StoreCount, err error) {
|
||
return GetEndOrderCount(db, []int{model.OrderStatusFinished}, true, beginTime, endTime)
|
||
}
|
||
|
||
func GetUnFinishOrderCountByDayNum(db *DaoDB, dayNum int, includeToday bool) (storeCountList []*model.StoreCount, err error) {
|
||
return GetEndOrderCountByDayNum(db, []int{model.OrderStatusCanceled}, false, dayNum, includeToday)
|
||
}
|
||
|
||
func GetFinishOrderCountByDayNum(db *DaoDB, dayNum int, includeToday bool) (storeCountList []*model.StoreCount, err error) {
|
||
return GetEndOrderCountByDayNum(db, []int{model.OrderStatusFinished}, false, dayNum, includeToday)
|
||
}
|
||
|
||
func GetAbsentGoodsOrderCountByDayNum(db *DaoDB, dayNum int, includeToday bool) (storeCountList []*model.StoreCount, err error) {
|
||
return GetEndOrderCountByDayNum(db, []int{model.OrderStatusFinished}, true, dayNum, includeToday)
|
||
}
|
||
|
||
func GetEndOrderCountByDayNum(db *DaoDB, statusList []int, checkAbsentOrder bool, dayNum int, includeToday bool) (storeCountList []*model.StoreCount, err error) {
|
||
beginTime, endTime := utils.GetTimeRange(utils.GetCurDate(), dayNum, includeToday)
|
||
return GetEndOrderCount(db, statusList, checkAbsentOrder, beginTime, endTime)
|
||
}
|
||
|
||
func GetEndOrderCount(db *DaoDB, statusList []int, checkAbsentOrder bool, beginTime, endTime time.Time) (storeCountList []*model.StoreCount, err error) {
|
||
sql := `
|
||
SELECT jx_store_id store_id, COUNT(*) count
|
||
FROM goods_order
|
||
WHERE order_finished_at >= ? AND order_finished_at <= ?
|
||
`
|
||
sqlParams := []interface{}{
|
||
beginTime,
|
||
endTime,
|
||
}
|
||
if len(statusList) > 0 {
|
||
sql += ` AND status IN (` + GenQuestionMarks(len(statusList)) + `)`
|
||
sqlParams = append(sqlParams, statusList)
|
||
}
|
||
if checkAbsentOrder {
|
||
sql += `
|
||
AND adjust_count > 0
|
||
`
|
||
}
|
||
sql += `
|
||
GROUP BY jx_store_id`
|
||
err = GetRows(db, &storeCountList, sql, sqlParams)
|
||
|
||
return storeCountList, err
|
||
}
|
||
|
||
func GetFinishOrderCountByDaDa(db *DaoDB, dayNum int, includeToday bool) (storeCountList []*model.StoreCount, err error) {
|
||
return GetFinishOrderCountByWayBillVendorID(db, model.VendorIDDada, dayNum, includeToday)
|
||
}
|
||
|
||
func GetFinishOrderCountBySelfDelivery(db *DaoDB, dayNum int, includeToday bool) (storeCountList []*model.StoreCount, err error) {
|
||
return GetFinishOrderCountByWayBillVendorID(db, model.VendorIDUnknown, dayNum, includeToday)
|
||
}
|
||
|
||
//通过运单平台ID来统计完成的订单量
|
||
func GetFinishOrderCountByWayBillVendorID(db *DaoDB, wayBillVendorID, dayNum int, includeToday bool) (storeCountList []*model.StoreCount, err error) {
|
||
sql := `
|
||
SELECT jx_store_id store_id, COUNT(*) count
|
||
FROM goods_order
|
||
where order_finished_at >= ? AND order_finished_at <= ?
|
||
AND status = ?
|
||
AND waybill_vendor_id = ?
|
||
GROUP BY jx_store_id
|
||
`
|
||
beginTime, endTime := utils.GetTimeRange(utils.GetCurDate(), dayNum, includeToday)
|
||
sqlParams := []interface{}{
|
||
beginTime,
|
||
endTime,
|
||
model.OrderStatusFinished,
|
||
wayBillVendorID,
|
||
}
|
||
|
||
return storeCountList, GetRows(db, &storeCountList, sql, sqlParams)
|
||
}
|
||
|
||
//拣货履约订单量, 仅统计达达专送
|
||
func GetStandardPickTimeOrderCountByDaDa(db *DaoDB, dayNum int, includeToday bool) (storeCountList []*model.StoreCount, err error) {
|
||
sql := `
|
||
SELECT t1.jx_store_id store_id, COUNT(*) count
|
||
FROM goods_order t1
|
||
JOIN order_status t2 ON t1.vendor_order_id = t2.vendor_order_id AND t1.vendor_id = t2.vendor_id
|
||
WHERE t1.order_finished_at >= ? AND t1.order_finished_at <= ?
|
||
AND t1.status = ?
|
||
AND t1.waybill_vendor_id = ?
|
||
AND t2.order_type = ?
|
||
AND t2.status = ?
|
||
AND t2.status_time <= t1.pick_deadline
|
||
GROUP BY t1.jx_store_id
|
||
`
|
||
beginTime, endTime := utils.GetTimeRange(utils.GetCurDate(), dayNum, includeToday)
|
||
sqlParams := []interface{}{
|
||
beginTime,
|
||
endTime,
|
||
model.OrderStatusFinished,
|
||
model.VendorIDDada,
|
||
model.OrderTypeOrder,
|
||
model.OrderStatusFinishedPickup,
|
||
}
|
||
|
||
return storeCountList, GetRows(db, &storeCountList, sql, sqlParams)
|
||
}
|
||
|
||
//按时履约订单量, 仅统计商家自送门店
|
||
func GetStandardFinishTimeOrderCountBySelfDelivery(db *DaoDB, dayNum int, includeToday bool) (storeCountList []*model.StoreCount, err error) {
|
||
sql := `
|
||
SELECT jx_store_id store_id, order_created_at, order_finished_at
|
||
FROM goods_order
|
||
WHERE order_finished_at >= ? AND order_finished_at <= ?
|
||
AND status = ?
|
||
AND waybill_vendor_id = ?
|
||
`
|
||
beginTime, endTime := utils.GetTimeRange(utils.GetCurDate(), dayNum, includeToday)
|
||
sqlParams := []interface{}{
|
||
beginTime,
|
||
endTime,
|
||
model.OrderStatusFinished,
|
||
model.VendorIDUnknown,
|
||
}
|
||
|
||
standardTime := int64(3600)
|
||
var storeOrderTimeList []*model.StoreOrderTime
|
||
storeOrderTimeMapData := make(map[int]int)
|
||
err = GetRows(db, &storeOrderTimeList, sql, sqlParams)
|
||
if err == nil && len(storeOrderTimeList) > 0 {
|
||
for _, value := range storeOrderTimeList {
|
||
if value.OrderFinishedTime.Unix()-value.OrderCreateTime.Unix() <= standardTime {
|
||
storeOrderTimeMapData[value.StoreID]++
|
||
}
|
||
}
|
||
for storeID, count := range storeOrderTimeMapData {
|
||
storeCountList = append(storeCountList, &model.StoreCount{storeID, count})
|
||
}
|
||
}
|
||
|
||
return storeCountList, err
|
||
}
|
||
|
||
//10分钟取货完成订单量, 仅统计达达专送
|
||
func GetStandardPickUpTimeOrderCountByDaDa(db *DaoDB, dayNum int, includeToday bool) (storeCountList []*model.StoreCount, err error) {
|
||
sql := `
|
||
SELECT t1.jx_store_id store_id, t1.vendor_order_id, t2.status_time, t2.status
|
||
FROM goods_order t1
|
||
JOIN order_status t2 ON t1.vendor_order_id = t2.vendor_order_id AND t1.vendor_id = t2.vendor_id
|
||
WHERE t1.order_finished_at >= ? AND t1.order_finished_at <= ?
|
||
AND t1.status = ?
|
||
AND t1.waybill_vendor_id = ?
|
||
AND t2.status in (?, ?)
|
||
ORDER BY t1.vendor_order_id, t2.status_time
|
||
`
|
||
beginTime, endTime := utils.GetTimeRange(utils.GetCurDate(), dayNum, includeToday)
|
||
sqlParams := []interface{}{
|
||
beginTime,
|
||
endTime,
|
||
model.OrderStatusFinished,
|
||
model.VendorIDDada,
|
||
model.OrderStatusFinishedPickup,
|
||
model.OrderStatusDelivering,
|
||
}
|
||
|
||
standardTime := int64(600)
|
||
var storeOrderStatusList []*model.StoreOrderStatus
|
||
storeOrderTimeMapData := make(map[int][]*model.StoreOrderStatus)
|
||
err = GetRows(db, &storeOrderStatusList, sql, sqlParams)
|
||
if err == nil && len(storeOrderStatusList) > 0 {
|
||
for _, value := range storeOrderStatusList {
|
||
if storeOrderTimeMapData[value.StoreID] == nil {
|
||
storeOrderTimeMapData[value.StoreID] = []*model.StoreOrderStatus{}
|
||
}
|
||
storeOrderTimeMapData[value.StoreID] = append(storeOrderTimeMapData[value.StoreID], value)
|
||
}
|
||
for storeID, valueList := range storeOrderTimeMapData {
|
||
count := 0
|
||
vendorOrderID := ""
|
||
statusBeginTime := int64(0)
|
||
statusEndTime := int64(0)
|
||
for _, value := range valueList {
|
||
if vendorOrderID != value.VendorOrderID {
|
||
if statusBeginTime != 0 && statusEndTime != 0 {
|
||
if statusEndTime-statusBeginTime <= standardTime {
|
||
count++
|
||
}
|
||
}
|
||
vendorOrderID = value.VendorOrderID
|
||
statusBeginTime = int64(0)
|
||
statusEndTime = int64(0)
|
||
}
|
||
if value.Status == model.OrderStatusFinishedPickup {
|
||
statusBeginTime = value.StatusTime.Unix()
|
||
} else if value.Status == model.OrderStatusDelivering {
|
||
statusEndTime = value.StatusTime.Unix()
|
||
}
|
||
}
|
||
if statusBeginTime != 0 && statusEndTime != 0 {
|
||
if statusEndTime-statusBeginTime <= standardTime {
|
||
count++
|
||
}
|
||
}
|
||
if count > 0 {
|
||
storeCountList = append(storeCountList, &model.StoreCount{storeID, count})
|
||
}
|
||
}
|
||
}
|
||
|
||
return storeCountList, err
|
||
}
|
||
|
||
//风控定单(门店相关人员在自己的门店下单)
|
||
func GetRiskOrderCount(db *DaoDB, dayNum int, includeToday bool) (storeOrderList []*model.StoreOrder, err error) {
|
||
sql := `
|
||
SELECT t1.jx_store_id store_id, t1.vendor_order_id
|
||
FROM goods_order t1
|
||
JOIN store t2 ON t2.id = t1.jx_store_id
|
||
WHERE t1.order_finished_at >= ? AND t1.order_finished_at <= ?
|
||
AND t1.consignee_mobile2 <> ""
|
||
AND (t1.consignee_mobile2 = t2.tel1 or t1.consignee_mobile2 = t2.tel2)
|
||
GROUP BY t1.jx_store_id
|
||
`
|
||
beginTime, endTime := utils.GetTimeRange(utils.GetCurDate(), dayNum, includeToday)
|
||
sqlParams := []interface{}{
|
||
beginTime,
|
||
endTime,
|
||
}
|
||
|
||
return storeOrderList, GetRows(db, &storeOrderList, sql, sqlParams)
|
||
}
|
||
|
||
func GetOrderPayList(db *DaoDB, vendorOrderID string, vendorID int) (payList []*model.OrderPay, err error) {
|
||
sql := `
|
||
SELECT t1.*
|
||
FROM order_pay t1
|
||
WHERE t1.deleted_at = ? AND t1.vendor_order_id = ? AND t1.vendor_id = ?
|
||
`
|
||
sqlParams := []interface{}{
|
||
utils.DefaultTimeValue,
|
||
vendorOrderID,
|
||
vendorID,
|
||
}
|
||
return payList, GetRows(db, &payList, sql, sqlParams)
|
||
}
|
||
|
||
func GetOrders(db *DaoDB, ids []int64, isIncludeSku, isIncludeFake bool, fromDateStr, toDateStr string, isDateFinish bool, skuIDs []int, isJxFirst bool, userID string, params map[string]interface{}, offset, pageSize int) (orders []*model.GoodsOrderExt, totalCount int, err error) {
|
||
globals.SugarLogger.Debugf("dao GetOrders ids:%v from:%s to:%s", ids, fromDateStr, toDateStr)
|
||
pageSize = jxutils.FormalizePageSize(pageSize)
|
||
offset = jxutils.FormalizePageOffset(offset)
|
||
|
||
sql := fmt.Sprintf(`
|
||
SELECT SQL_CALC_FOUND_ROWS
|
||
t1.*,
|
||
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,
|
||
city.name city_name, district.name district_name`, model.DefaultEarningPricePercentage)
|
||
if isIncludeSku {
|
||
sql += `,
|
||
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,
|
||
t3.sale_price sku_sale_price,
|
||
t3.sku_name`
|
||
}
|
||
sql += `
|
||
FROM goods_order t1
|
||
LEFT JOIN waybill t2 ON t1.vendor_waybill_id = t2.vendor_waybill_id AND t1.waybill_vendor_id = t2.waybill_vendor_id
|
||
LEFT JOIN store t5 ON t5.id = IF(t1.jx_store_id <> 0, t1.jx_store_id, t1.store_id)
|
||
LEFT JOIN place city ON city.code = t5.city_code
|
||
LEFT JOIN place district ON district.code = t5.district_code`
|
||
if isIncludeSku {
|
||
sql += `
|
||
JOIN order_sku t3 ON t3.vendor_order_id = t1.vendor_order_id AND t3.vendor_id = t1.vendor_id`
|
||
}
|
||
sqlWhere := " WHERE 1 = 1"
|
||
var (
|
||
sqlParams []interface{}
|
||
)
|
||
if len(ids) > 0 { // 如果给定了ids,忽略其它所有条件
|
||
sqlWhere += " AND t1.id IN (" + GenQuestionMarks(len(ids)) + ")"
|
||
sqlParams = append(sqlParams, ids)
|
||
} else {
|
||
// 如果搜索关键字可能为订单号,则当成订单号查询
|
||
if params["keyword"] != nil {
|
||
if jxutils.GetPossibleVendorIDFromVendorOrderID(params["keyword"].(string)) > model.VendorIDUnknown {
|
||
params["vendorOrderID"] = params["keyword"]
|
||
}
|
||
}
|
||
if params["orderID"] != nil || params["vendorOrderID"] != nil {
|
||
sqlWhere += " AND (t1.vendor_order_id = ? OR t1.vendor_order_id2 = ?)"
|
||
vendorOrderID := params["vendorOrderID"]
|
||
if vendorOrderID == nil {
|
||
vendorOrderID = params["orderID"]
|
||
}
|
||
sqlParams = []interface{}{
|
||
vendorOrderID,
|
||
vendorOrderID,
|
||
}
|
||
} else {
|
||
timeList, err2 := jxutils.BatchStr2Time(fromDateStr, toDateStr)
|
||
if err = err2; err != nil {
|
||
return nil, 0, err
|
||
}
|
||
if utils.IsTimeZero(timeList[0]) {
|
||
return nil, 0, fmt.Errorf("在没有指定订单号时,必须指定查询日期范围")
|
||
}
|
||
if utils.IsTimeZero(timeList[1]) {
|
||
timeList[1] = timeList[0]
|
||
}
|
||
timeList[1] = timeList[1].Add(24 * time.Hour)
|
||
if isDateFinish {
|
||
sqlWhere += `
|
||
AND t1.order_finished_at >= ? AND t1.order_finished_at < ?`
|
||
} else {
|
||
sqlWhere += `
|
||
AND t1.order_created_at >= ? AND t1.order_created_at < ?`
|
||
}
|
||
sqlParams = []interface{}{
|
||
timeList[0],
|
||
timeList[1],
|
||
}
|
||
if params["keyword"] != nil {
|
||
keyword := params["keyword"].(string)
|
||
keywordLike := "%" + keyword + "%"
|
||
sqlWhere += `
|
||
AND (t1.store_name LIKE ? OR t1.vendor_order_id LIKE ? OR t1.vendor_order_id2 LIKE ? OR t1.vendor_store_id LIKE ?
|
||
OR t1.consignee_name LIKE ? OR t1.consignee_mobile LIKE ? OR t1.consignee_mobile2 LIKE ? OR t1.consignee_address LIKE ?
|
||
OR t2.vendor_waybill_id LIKE ? OR t2.courier_name LIKE ? OR t2.courier_mobile LIKE ?
|
||
`
|
||
sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike)
|
||
if keywordInt64, err2 := strconv.ParseInt(keyword, 10, 64); err2 == nil {
|
||
sqlWhere += " OR t1.store_id = ? OR t1.jx_store_id = ?"
|
||
sqlParams = append(sqlParams, keywordInt64, keywordInt64)
|
||
}
|
||
sqlWhere += ")"
|
||
}
|
||
if params["waybillVendorIDs"] != nil {
|
||
var waybillVendorIDs []int
|
||
if err = utils.UnmarshalUseNumber([]byte(params["waybillVendorIDs"].(string)), &waybillVendorIDs); err != nil {
|
||
return nil, 0, err
|
||
}
|
||
if len(waybillVendorIDs) > 0 {
|
||
sqlWhere += " AND t1.waybill_vendor_id IN (" + GenQuestionMarks(len(waybillVendorIDs)) + ")"
|
||
sqlParams = append(sqlParams, waybillVendorIDs)
|
||
}
|
||
}
|
||
if params["storeIDs"] != nil {
|
||
var storeIDs []int
|
||
if err = utils.UnmarshalUseNumber([]byte(params["storeIDs"].(string)), &storeIDs); err != nil {
|
||
return nil, 0, err
|
||
}
|
||
if len(storeIDs) > 0 {
|
||
if storeIDs[0] == 0 { // 容错
|
||
sqlWhere += " AND 1 = 0"
|
||
} else {
|
||
sqlWhere += " AND IF(t1.jx_store_id != 0, t1.jx_store_id, t1.store_id) IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||
sqlParams = append(sqlParams, storeIDs)
|
||
}
|
||
}
|
||
}
|
||
if params["statuss"] != nil {
|
||
var statuss []int
|
||
if err = utils.UnmarshalUseNumber([]byte(params["statuss"].(string)), &statuss); err != nil {
|
||
return nil, 0, err
|
||
}
|
||
if len(statuss) > 0 {
|
||
sqlWhere += " AND t1.status IN (" + GenQuestionMarks(len(statuss)) + ")"
|
||
sqlParams = append(sqlParams, statuss)
|
||
}
|
||
}
|
||
if params["lockStatuss"] != nil {
|
||
var lockStatuss []int
|
||
if err = utils.UnmarshalUseNumber([]byte(params["lockStatuss"].(string)), &lockStatuss); err != nil {
|
||
return nil, 0, err
|
||
}
|
||
if len(lockStatuss) > 0 {
|
||
sqlWhere += " AND t1.lock_status IN (" + GenQuestionMarks(len(lockStatuss)) + ")"
|
||
sqlParams = append(sqlParams, lockStatuss)
|
||
}
|
||
}
|
||
if params["cities"] != nil {
|
||
var cities []int
|
||
if err = utils.UnmarshalUseNumber([]byte(params["cities"].(string)), &cities); err != nil {
|
||
return nil, 0, err
|
||
}
|
||
if len(cities) > 0 {
|
||
sqlWhere += " AND t5.city_code IN (" + GenQuestionMarks(len(cities)) + ") AND t5.id IS NOT NULL"
|
||
sqlParams = append(sqlParams, cities)
|
||
}
|
||
}
|
||
if !isIncludeFake {
|
||
sqlWhere += " AND (t1.flag & ?) = 0"
|
||
sqlParams = append(sqlParams, model.OrderFlagMaskFake)
|
||
}
|
||
if len(skuIDs) > 0 {
|
||
sqlWhere += " AND (SELECT COUNT(*) FROM order_sku t11 WHERE t11.vendor_order_id = t1.vendor_order_id AND t11.vendor_id = t1.vendor_id AND t11.jx_sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")) > 0"
|
||
sqlParams = append(sqlParams, skuIDs)
|
||
}
|
||
if params["adjustCount"] != nil {
|
||
sqlWhere += " AND t1.adjust_count >= ?"
|
||
sqlParams = append(sqlParams, params["adjustCount"])
|
||
}
|
||
if mustInvoice, ok := params["mustInvoice"].(bool); ok && mustInvoice {
|
||
sqlWhere += " AND t1.invoice_taxer_id <> ''"
|
||
}
|
||
}
|
||
if params["vendorIDs"] != nil {
|
||
var vendorIDs []int
|
||
if err = utils.UnmarshalUseNumber([]byte(params["vendorIDs"].(string)), &vendorIDs); err != nil {
|
||
return nil, 0, err
|
||
}
|
||
if len(vendorIDs) > 0 {
|
||
sqlWhere += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
|
||
sqlParams = append(sqlParams, vendorIDs)
|
||
}
|
||
}
|
||
if userID != "" {
|
||
sqlWhere += " AND t1.user_id = ?"
|
||
sqlParams = append(sqlParams, userID)
|
||
}
|
||
}
|
||
sql += sqlWhere
|
||
if isJxFirst {
|
||
sql += `
|
||
ORDER BY IF(t1.status < ?, IF(t1.vendor_id = ?, 0, 1), 0), t1.order_created_at DESC`
|
||
sqlParams = append(sqlParams, model.OrderStatusEndBegin, model.VendorIDJX)
|
||
} else {
|
||
if isIncludeSku && userID == "" {
|
||
sql += `
|
||
ORDER BY t1.id`
|
||
} else {
|
||
sql += `
|
||
ORDER BY t1.order_created_at DESC`
|
||
}
|
||
}
|
||
sql += `
|
||
LIMIT ? OFFSET ?`
|
||
sqlParams = append(sqlParams, pageSize, offset)
|
||
|
||
Begin(db)
|
||
defer Commit(db)
|
||
if err = GetRows(db, &orders, sql, sqlParams...); err == nil {
|
||
totalCount = GetLastTotalRowCount(db)
|
||
}
|
||
return orders, totalCount, err
|
||
}
|
||
|
||
func UpdateOrdersWithoutJxStoreID(db *DaoDB, fromDate, toDate time.Time) (count int64, err error) {
|
||
sql := `
|
||
UPDATE goods_order t1
|
||
JOIN store_map a ON a.vendor_store_id = t1.vendor_store_id AND a.vendor_id = t1.vendor_id
|
||
SET t1.jx_store_id = a.store_id
|
||
WHERE t1.jx_store_id = 0
|
||
AND a.deleted_at = ?
|
||
AND t1.order_created_at >= ? AND t1.order_created_at <= ?
|
||
`
|
||
sqlParams := []interface{}{
|
||
utils.DefaultTimeValue,
|
||
}
|
||
if !utils.IsTimeZero(fromDate) {
|
||
sqlParams = append(sqlParams, fromDate)
|
||
if !utils.IsTimeZero(toDate) {
|
||
sqlParams = append(sqlParams, toDate)
|
||
} else {
|
||
sqlParams = append(sqlParams, time.Now())
|
||
}
|
||
} else {
|
||
if !utils.IsTimeZero(toDate) {
|
||
sqlParams = append(sqlParams, toDate.AddDate(0, 0, -5))
|
||
sqlParams = append(sqlParams, toDate)
|
||
} else {
|
||
sqlParams = append(sqlParams, time.Now().AddDate(0, 0, -5))
|
||
sqlParams = append(sqlParams, time.Now())
|
||
}
|
||
}
|
||
return ExecuteSQL(db, sql, sqlParams)
|
||
}
|
||
|
||
func GetMyOrderCountInfo(db *DaoDB, userID string, fromDate, toDate time.Time, statuss []int) (countInfo []*model.GoodsOrderCountInfo, err error) {
|
||
if utils.IsTimeZero(fromDate) {
|
||
return nil, fmt.Errorf("必须指定开始日期")
|
||
}
|
||
if !utils.IsTimeZero(fromDate) {
|
||
fromDate = utils.Time2Date(fromDate)
|
||
if utils.IsTimeZero(toDate) {
|
||
toDate = fromDate
|
||
}
|
||
}
|
||
if !utils.IsTimeZero(toDate) {
|
||
toDate = utils.Time2Date(toDate)
|
||
toDate = toDate.Add(24 * time.Hour)
|
||
}
|
||
|
||
sql := `
|
||
SELECT t1.lock_status, t1.status, COUNT(*) count
|
||
FROM goods_order t1
|
||
WHERE t1.user_id = ? AND t1.vendor_id = ?
|
||
AND t1.order_created_at >= ? AND t1.order_created_at < ?
|
||
`
|
||
sqlParams := []interface{}{
|
||
userID,
|
||
model.VendorIDJX,
|
||
fromDate, toDate,
|
||
}
|
||
if len(statuss) > 0 {
|
||
sql += " AND t1.status IN (" + GenQuestionMarks(len(statuss)) + ")"
|
||
sqlParams = append(sqlParams, statuss)
|
||
}
|
||
sql += " GROUP BY 1,2"
|
||
err = GetRows(db, &countInfo, sql, sqlParams...)
|
||
return countInfo, err
|
||
}
|