1738 lines
60 KiB
Go
1738 lines
60 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"` // 预估结算给门店老板的钱
|
||
NewEarningPrice int64 `json:"newEarningPrice"` // 预估结算给门店老板的钱(新规则)
|
||
|
||
DistanceFreightMoney int64 `json:"distanceFreightMoney"` // 商户承担的远距离配送费(当前只有京东到家有值)
|
||
WaybillTipMoney int64 `json:"waybillTipMoney"` // 京西加的平台配送小费
|
||
|
||
RealEarningPrice int64 `json:"realEarningPrice"`
|
||
}
|
||
|
||
type OrderSkuWithActualPayPrice struct {
|
||
model.OrderSku
|
||
|
||
ActualPayPrice int64 `json:"actualPayPrice"` // 单位为分 顾客实际支付
|
||
DistanceFreightMoney int64 `json:"distanceFreightMoney"` // 商户承担的远距离配送费(当前只有京东到家有值)
|
||
WaybillTipMoney int64 `json:"waybillTipMoney"` // 京西加的平台配送小费
|
||
|
||
StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid
|
||
Status int `json:"status"` // 参见OrderStatus*相关的常量定义
|
||
|
||
PayPercentage int `json:"payPercentage"`
|
||
OrderPayPercentage int `json:"orderPayPercentage"`
|
||
NewEarningPrice int64 `json:"newEarningPrice"`
|
||
EarningType int `json:"earningType"`
|
||
CityCode int `json:"cityCode"`
|
||
}
|
||
|
||
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用),没有做转换
|
||
}
|
||
|
||
type GoodsOrderPay struct {
|
||
model.GoodsOrder
|
||
TransactionID string `orm:"column(transaction_id)" json:"transactionID"`
|
||
}
|
||
|
||
//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.status < ?
|
||
AND (t1.flag & ?) = 0
|
||
ORDER BY t1.order_created_at DESC, t1.id DESC;
|
||
`
|
||
sqlParams := []interface{}{
|
||
storeID,
|
||
orderTime,
|
||
lastOrderSeqID,
|
||
model.OrderStatusNew,
|
||
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 ClearOrderFlag2(db *DaoDB, userName string, vendorOrderID string, vendorID int, flag int) (err error) {
|
||
_, err = ExecuteSQL(db, `
|
||
UPDATE goods_order
|
||
SET 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, isNotFaild bool) (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
|
||
LEFT JOIN afs_order t4 ON t4.afs_order_id = t1.afs_order_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)
|
||
}
|
||
if isNotFaild {
|
||
sql += " AND t4.status <> ?"
|
||
sqlParams = append(sqlParams, model.AfsOrderStatusFailed)
|
||
}
|
||
err = GetRows(db, &skus, sql, sqlParams...)
|
||
return skus, err
|
||
}
|
||
|
||
func GetStoreOrderSkuList(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAtEnd time.Time, statusList []int, isFinish bool) (skuList []*OrderSkuWithActualPayPrice, err error) {
|
||
// order_finished_at
|
||
sql := `
|
||
SELECT t1.*,
|
||
IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) store_id, t2.status, t2.actual_pay_price, t2.distance_freight_money, t2.waybill_tip_money, t2.new_earning_price,
|
||
t3.pay_percentage, t2.earning_type, t2.order_pay_percentage, t3.city_code
|
||
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 1=1`
|
||
if isFinish {
|
||
sql += " AND t2.order_finished_at >= ? AND t2.order_finished_at <= ?"
|
||
} else {
|
||
sql += " AND 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, isFinish bool) (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, t2.new_earning_price,
|
||
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))
|
||
if isFinish {
|
||
sql += ") AND t12.afs_finished_at >= ? AND t12.afs_finished_at <= ?"
|
||
} else {
|
||
sql += ") AND t12.afs_created_at >= ? AND t12.afs_created_at <= ?"
|
||
}
|
||
sql += ") 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 GetStoreOrderSkuList4Afs2(db *DaoDB, vendorOrderIDs []string) (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, t2.new_earning_price,
|
||
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 t12.vendor_order_id IN (` + GenQuestionMarks(len(vendorOrderIDs))
|
||
sql += ") t4 ON t4.vendor_order_id = t2.vendor_order_id AND t4.vendor_id = t2.vendor_id"
|
||
sqlParams := []interface{}{
|
||
vendorOrderIDs,
|
||
}
|
||
err = GetRows(db, &skuList, sql, sqlParams...)
|
||
return skuList, err
|
||
}
|
||
|
||
func GetStoreAfsOrderSkuList(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAtEnd time.Time, statusList []int, isFinish bool) (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 AND t2.afs_order_id = t1.afs_order_id
|
||
WHERE t1.is_afs_order = 1
|
||
`
|
||
if isFinish {
|
||
sql += " AND t2.afs_finished_at >= ? AND t2.afs_finished_at <= ?"
|
||
} else {
|
||
sql += " AND t2.afs_created_at >= ? AND t2.afs_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, &afsSkuList, sql, sqlParams...)
|
||
return afsSkuList, err
|
||
}
|
||
|
||
func GetStoreAfsOrderSkuList2(db *DaoDB, vendorOrderIDs []string) (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 AND t2.afs_order_id = t1.afs_order_id
|
||
WHERE t1.is_afs_order = 1 AND t2.status = ?
|
||
`
|
||
sqlParams := []interface{}{model.AfsOrderStatusFinished}
|
||
if len(vendorOrderIDs) > 0 {
|
||
sql += " AND t2.vendor_order_id IN (" + GenQuestionMarks(len(vendorOrderIDs)) + ")"
|
||
sqlParams = append(sqlParams, vendorOrderIDs)
|
||
}
|
||
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 a.* FROM (
|
||
SELECT
|
||
DISTINCT 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(t1.order_pay_percentage > 0, t1.order_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,
|
||
t5.pay_percentage, t5.old_pay_percentage, t5.market_man_phone, tu.name market_man_name,
|
||
t5.operator_phone, t5.operator_phone2, t5.operator_phone3, tu1.name operator_name, tu2.name operator_name2, tu3.name operator_name3,
|
||
t6.vendor_pay_percentage,
|
||
city.name city_name, district.name district_name,
|
||
ROUND(IF(t1.earning_type = 1, t1.total_shop_money-t1.earning_price-IFNULL(t2.desired_fee,0), t1.total_shop_money *(t1.order_pay_percentage/2)/100)) jx_income`, 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,
|
||
IF(t3.store_sub_id = 0, 0, 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 AND t1.vendor_order_id = t2.vendor_order_id
|
||
LEFT JOIN store t5 ON t5.id = IF(t1.jx_store_id <> 0, t1.jx_store_id, t1.store_id)
|
||
LEFT JOIN store_map t6 ON t6.store_id = t5.id AND t6.deleted_at = '1970-01-01 00:00:00' AND t6.vendor_id = t1.vendor_id
|
||
LEFT JOIN place city ON city.code = t5.city_code
|
||
LEFT JOIN place district ON district.code = t5.district_code
|
||
LEFT JOIN user tu ON tu.mobile = t5.market_man_phone
|
||
LEFT JOIN user tu1 ON tu1.mobile = t5.operator_phone
|
||
LEFT JOIN user tu2 ON tu2.mobile = t5.operator_phone2
|
||
LEFT JOIN user tu3 ON tu3.mobile = t5.operator_phone3
|
||
-- LEFT JOIN (SELECT MAX(created_at), afs_order_id, vendor_order_id, vendor_id FROM afs_order WHERE status = 180 GROUP BY 2, 3, 4) t7 ON t7.vendor_order_id = t1.vendor_order_id AND t7.vendor_id = t1.vendor_id
|
||
-- LEFT JOIN afs_order t8 ON t8.afs_order_id = t7.afs_order_id
|
||
`
|
||
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["brandID"] != nil {
|
||
if utils.MustInterface2Int64(params["brandID"]) != 0 {
|
||
sqlWhere += " AND t5.brand_id = ?"
|
||
sqlParams = append(sqlParams, utils.MustInterface2Int64(params["brandID"]))
|
||
}
|
||
}
|
||
if params["marketManPhone"] != nil {
|
||
sqlWhere += " AND t5.market_man_phone = ?"
|
||
sqlParams = append(sqlParams, params["marketManPhone"].(string))
|
||
}
|
||
if params["jdPhone"] != nil {
|
||
sqlWhere += " AND t5.operator_phone = ?"
|
||
sqlParams = append(sqlParams, params["jdPhone"].(string))
|
||
}
|
||
if params["mtPhone"] != nil {
|
||
sqlWhere += " AND t5.operator_phone2 = ?"
|
||
sqlParams = append(sqlParams, params["mtPhone"].(string))
|
||
}
|
||
if params["ebaiPhone"] != nil {
|
||
sqlWhere += " AND t5.operator_phone3 = ?"
|
||
sqlParams = append(sqlParams, params["ebaiPhone"].(string))
|
||
}
|
||
if params["deliveryTypes"] != nil {
|
||
var deliveryTypes []string
|
||
if err = utils.UnmarshalUseNumber([]byte(params["deliveryTypes"].(string)), &deliveryTypes); err != nil {
|
||
return nil, 0, err
|
||
}
|
||
if len(deliveryTypes) > 0 {
|
||
sqlWhere += " AND t1.delivery_type IN (" + GenQuestionMarks(len(deliveryTypes)) + ")"
|
||
sqlParams = append(sqlParams, deliveryTypes)
|
||
}
|
||
}
|
||
// if params["deliveryType"] != nil {
|
||
// if params["deliveryType"].(string) != "" {
|
||
// sqlWhere += " AND t1.delivery_type = ?"
|
||
// sqlParams = append(sqlParams, params["deliveryType"].(string))
|
||
// }
|
||
// }
|
||
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 == "" && len(ids) == 0 {
|
||
sql += `
|
||
ORDER BY t1.id`
|
||
} else {
|
||
sql += `
|
||
ORDER BY t1.order_created_at DESC`
|
||
}
|
||
}
|
||
sql += `
|
||
) a WHERE 1 = 1`
|
||
if params["jxIncomeBegin"] != nil {
|
||
//if utils.MustInterface2Int64(params["jxIncomeBegin"]) != 0 {
|
||
sql += " AND a.jx_income >= ?"
|
||
sqlParams = append(sqlParams, utils.MustInterface2Int64(params["jxIncomeBegin"]))
|
||
//}
|
||
}
|
||
if params["jxIncomeEnd"] != nil {
|
||
//if utils.MustInterface2Int64(params["jxIncomeEnd"]) != 0 {
|
||
sql += " AND a.jx_income <= ?"
|
||
sqlParams = append(sqlParams, utils.MustInterface2Int64(params["jxIncomeEnd"]))
|
||
//}
|
||
}
|
||
sql += " LIMIT ? OFFSET ?"
|
||
sqlParams = append(sqlParams, pageSize, offset)
|
||
txDB, _ := Begin(db)
|
||
defer Commit(db, txDB)
|
||
if err = GetRowsTx(txDB, &orders, sql, sqlParams...); err == nil {
|
||
totalCount = GetLastTotalRowCount2(db, txDB)
|
||
}
|
||
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
|
||
}
|
||
|
||
func GetPendingFakeOrders(db *DaoDB, vendorIDs []int, orderCreatedAfter, orderCreatedBefore time.Time) (orderList []*model.GoodsOrder, err error) {
|
||
sql := `
|
||
SELECT t1.*
|
||
FROM goods_order t1
|
||
JOIN new_config t2 ON t2.type = ? AND t2.key = ? AND t2.deleted_at = ?
|
||
AND LOCATE(IF(t1.consignee_mobile2 <> '', t1.consignee_mobile2, t1.consignee_mobile), t2.value) > 0
|
||
WHERE t1.order_created_at >= ? AND t1.order_created_at <= ?
|
||
AND t1.delivery_type = ?
|
||
AND t1.status >= ? AND t1.status < ?
|
||
`
|
||
sqlParams := []interface{}{
|
||
model.ConfigTypeSys,
|
||
model.ConfigSysFakeOrderMobiles,
|
||
utils.DefaultTimeValue,
|
||
orderCreatedAfter,
|
||
orderCreatedBefore,
|
||
model.OrderDeliveryTypeSelfTake,
|
||
model.OrderStatusAccepted,
|
||
model.OrderStatusEndBegin,
|
||
}
|
||
if len(vendorIDs) > 0 {
|
||
sql += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
|
||
sqlParams = append(sqlParams, vendorIDs)
|
||
}
|
||
// globals.SugarLogger.Debug(sql)
|
||
err = GetRows(db, &orderList, sql, sqlParams...)
|
||
return orderList, err
|
||
}
|
||
|
||
// 不会有Skus信息
|
||
func LoadPendingOrders(db *DaoDB, orderCreatedAfter time.Time, beforStatus int) (orderList []*model.GoodsOrder, err error) {
|
||
sql := `
|
||
SELECT *
|
||
FROM goods_order
|
||
WHERE order_created_at >= ?
|
||
AND status < ?`
|
||
sqlParams := []interface{}{orderCreatedAfter, beforStatus}
|
||
err = GetRows(db, &orderList, sql, sqlParams...)
|
||
return orderList, err
|
||
}
|
||
|
||
func GetWayBillByOrderID(db *DaoDB, orderStatus, vendorID, waybillVendorID int, vendorOrderID string) (wayBillList []*model.Waybill, err error) {
|
||
sql := `
|
||
SELECT b.*
|
||
FROM goods_order a
|
||
JOIN waybill b ON IF(a.waybill_vendor_id = -1,a.vendor_order_id,a.vendor_waybill_id) = b.vendor_waybill_id AND b.order_vendor_id = a.vendor_id
|
||
WHERE a.vendor_order_id = ?
|
||
AND a.vendor_id = ?
|
||
`
|
||
sqlParams := []interface{}{
|
||
vendorOrderID,
|
||
vendorID,
|
||
}
|
||
if orderStatus > 0 {
|
||
sql += ` AND a.status = ?`
|
||
sqlParams = append(sqlParams, orderStatus)
|
||
}
|
||
if waybillVendorID > 0 {
|
||
sql += ` AND b.waybill_vendor_id = ?`
|
||
sqlParams = append(sqlParams, waybillVendorID)
|
||
}
|
||
err = GetRows(db, &wayBillList, sql, sqlParams...)
|
||
return wayBillList, err
|
||
}
|
||
|
||
func GetOrdersSupplement(db *DaoDB, storIDs, vendorIDs, statuss []int, vendorOrderID string, fromTime, toTime time.Time, stype, IsReverse, offset, pageSize int) (orderSupplementFee []*model.OrderSupplementFee, totalCount int, err error) {
|
||
sql := `
|
||
SELECT SQL_CALC_FOUND_ROWS *
|
||
FROM order_supplement_fee
|
||
WHERE 1=1
|
||
AND deleted_at = ?
|
||
`
|
||
sqlParams := []interface{}{
|
||
utils.DefaultTimeValue,
|
||
}
|
||
if !utils.IsTimeZero(fromTime) {
|
||
sql += " AND supplement_time >= ?"
|
||
sqlParams = append(sqlParams, fromTime)
|
||
}
|
||
if !utils.IsTimeZero(toTime) {
|
||
sql += " AND supplement_time <= ?"
|
||
sqlParams = append(sqlParams, toTime)
|
||
}
|
||
if len(storIDs) > 0 {
|
||
sql += " AND store_id IN (" + GenQuestionMarks(len(storIDs)) + ")"
|
||
sqlParams = append(sqlParams, storIDs)
|
||
}
|
||
if len(vendorIDs) > 0 {
|
||
sql += " AND vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
|
||
sqlParams = append(sqlParams, vendorIDs)
|
||
}
|
||
if vendorOrderID != "" {
|
||
sql += " AND vendor_order_id = ?"
|
||
sqlParams = append(sqlParams, vendorOrderID)
|
||
}
|
||
if len(statuss) > 0 {
|
||
sql += " AND status IN (" + GenQuestionMarks(len(statuss)) + ")"
|
||
sqlParams = append(sqlParams, statuss)
|
||
}
|
||
if stype > 0 {
|
||
sql += " AND type = ?"
|
||
sqlParams = append(sqlParams, stype)
|
||
}
|
||
if IsReverse == -1 {
|
||
sql += " AND link_id = 0"
|
||
} else if IsReverse == 1 {
|
||
sql += " AND link_id <> 0"
|
||
}
|
||
sql += " ORDER BY supplement_time DESC"
|
||
sql += " LIMIT ? OFFSET ?"
|
||
sqlParams = append(sqlParams, pageSize, offset)
|
||
txDB, _ := Begin(db)
|
||
defer Commit(db, txDB)
|
||
if err = GetRowsTx(txDB, &orderSupplementFee, sql, sqlParams...); err == nil {
|
||
totalCount = GetLastTotalRowCount2(db, txDB)
|
||
}
|
||
return orderSupplementFee, totalCount, err
|
||
}
|
||
|
||
func GetOrdersSupplementNoPage(db *DaoDB, ID int, storIDs, vendorIDs, statuss []int, vendorOrderID string, fromTime, toTime time.Time, stype, IsReverse int) (orderSupplementFee []*model.OrderSupplementFee, err error) {
|
||
sql := `
|
||
SELECT *
|
||
FROM order_supplement_fee
|
||
WHERE 1=1
|
||
AND deleted_at = ?
|
||
`
|
||
sqlParams := []interface{}{
|
||
utils.DefaultTimeValue,
|
||
}
|
||
if !utils.IsTimeZero(fromTime) {
|
||
sql += " AND supplement_time >= ?"
|
||
sqlParams = append(sqlParams, fromTime)
|
||
}
|
||
if !utils.IsTimeZero(toTime) {
|
||
sql += " AND supplement_time <= ?"
|
||
sqlParams = append(sqlParams, toTime)
|
||
}
|
||
if len(storIDs) > 0 {
|
||
sql += " AND store_id IN (" + GenQuestionMarks(len(storIDs)) + ")"
|
||
sqlParams = append(sqlParams, storIDs)
|
||
}
|
||
if len(vendorIDs) > 0 {
|
||
sql += " AND vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
|
||
sqlParams = append(sqlParams, vendorIDs)
|
||
}
|
||
if vendorOrderID != "" {
|
||
sql += " AND vendor_order_id = ?"
|
||
sqlParams = append(sqlParams, vendorOrderID)
|
||
}
|
||
if len(statuss) > 0 {
|
||
sql += " AND status IN (" + GenQuestionMarks(len(statuss)) + ")"
|
||
sqlParams = append(sqlParams, statuss)
|
||
}
|
||
if stype > 0 {
|
||
sql += " AND type = ?"
|
||
sqlParams = append(sqlParams, stype)
|
||
}
|
||
if ID > 0 {
|
||
sql += " AND id = ?"
|
||
sqlParams = append(sqlParams, ID)
|
||
}
|
||
if IsReverse == -1 {
|
||
sql += " AND link_id = 0"
|
||
} else if IsReverse == 1 {
|
||
sql += " AND link_id <> 0"
|
||
}
|
||
err = GetRows(db, &orderSupplementFee, sql, sqlParams...)
|
||
return orderSupplementFee, err
|
||
}
|
||
|
||
func GetJxOrderCount(db *DaoDB, storeID int, orderID string, date time.Time) (count int, err error) {
|
||
if utils.IsTimeZero(date) {
|
||
date = time.Now()
|
||
}
|
||
sql := `
|
||
SELECT COUNT(*) ct
|
||
FROM goods_order t1
|
||
WHERE t1.vendor_id = ? AND t1.jx_store_id = ? AND (t1.status >= ? OR t1.order_seq > 0) AND t1.order_created_at >= ? AND t1.order_created_at < ?
|
||
`
|
||
sqlParams := []interface{}{
|
||
model.VendorIDJX,
|
||
storeID,
|
||
model.OrderStatusNew,
|
||
utils.Time2Date(date),
|
||
utils.Time2Date(date).Add(24 * time.Hour),
|
||
}
|
||
|
||
if orderID != "" {
|
||
sql += " AND t1.vendor_order_id != ?"
|
||
sqlParams = append(sqlParams, orderID)
|
||
}
|
||
err = GetRow(db, &count, sql, sqlParams...)
|
||
return count, err
|
||
}
|
||
|
||
func GetOrdersForJxPay(db *DaoDB, finishTimeBegin, finishTimeEnd time.Time) (goods []*GoodsOrderPay, err error) {
|
||
sql := `
|
||
SELECT a.*,b.transaction_id
|
||
FROM goods_order a
|
||
JOIN order_pay b ON a.vendor_order_id = b.vendor_order_id AND a.vendor_id = b.vendor_id
|
||
JOIN user c ON c.user_id = a.user_id
|
||
WHERE a.vendor_id = ?
|
||
AND a.order_finished_at >= ?
|
||
AND a.order_finished_at <= ?
|
||
AND a.status = ?
|
||
AND c.parent_mobile <> ''
|
||
AND a.store_id <> ?
|
||
`
|
||
sqlParams := []interface{}{
|
||
model.VendorIDJX,
|
||
finishTimeBegin,
|
||
finishTimeEnd,
|
||
model.OrderStatusFinished,
|
||
model.MatterStoreID,
|
||
}
|
||
err = GetRows(db, &goods, sql, sqlParams...)
|
||
return goods, err
|
||
}
|
||
|
||
func GetWaybills(db *DaoDB, vendorOrderID string) (waybills []*model.Waybill, err error) {
|
||
sql := `SELECT *
|
||
FROM waybill
|
||
WHERE vendor_order_id = ?
|
||
`
|
||
sqlParams := []interface{}{vendorOrderID}
|
||
err = GetRows(db, &waybills, sql, sqlParams)
|
||
return waybills, err
|
||
}
|
||
|
||
func GetMatterChildOrders(db *DaoDB, vendorOrderID string) (goods []*model.GoodsOrder, err error) {
|
||
sql := `SELECT *
|
||
FROM goods_order
|
||
WHERE vendor_order_id LIKE ? OR vendor_order_id LIKE ? OR vendor_order_id LIKE ?
|
||
AND vendor_id = ?
|
||
ORDER BY vendor_order_id DESC
|
||
`
|
||
sqlParams := []interface{}{
|
||
vendorOrderID + "0%", vendorOrderID + "1%", vendorOrderID + "2%",
|
||
model.VendorIDJX,
|
||
}
|
||
err = GetRows(db, &goods, sql, sqlParams)
|
||
return goods, err
|
||
}
|
||
|
||
func GetSimpleOrder(db *DaoDB, vendorOrderID string) (goods *model.GoodsOrder, err error) {
|
||
sql := `
|
||
SELECT *
|
||
FROM goods_order
|
||
WHERE vendor_order_id = ?
|
||
`
|
||
sqlParams := []interface{}{vendorOrderID}
|
||
err = GetRow(db, &goods, sql, sqlParams)
|
||
return goods, err
|
||
}
|
||
|
||
func GetSimpleOrderSkus(db *DaoDB, vendorOrderID string, skuIDs []int) (skus []*model.OrderSku, err error) {
|
||
sql := `
|
||
SELECT *
|
||
FROM order_sku
|
||
WHERE vendor_order_id = ?
|
||
`
|
||
sqlParams := []interface{}{vendorOrderID}
|
||
if len(skuIDs) > 0 {
|
||
sql += " AND sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
||
sqlParams = append(sqlParams, skuIDs)
|
||
}
|
||
err = GetRows(db, &skus, sql, sqlParams)
|
||
return skus, err
|
||
}
|
||
|
||
func GetAfsOrdersByPage(db *DaoDB, vendorOrderID, afsOrderID, userID string, fromTime, toTime time.Time, offset, pageSize int) (afsOrderList []*model.AfsOrder, totalCount int, err error) {
|
||
pageSize = jxutils.FormalizePageSize(pageSize)
|
||
offset = jxutils.FormalizePageOffset(offset)
|
||
sql := `
|
||
SELECT SQL_CALC_FOUND_ROWS t1.*
|
||
FROM afs_order t1
|
||
LEFT JOIN goods_order t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id
|
||
WHERE 1 = 1
|
||
`
|
||
sqlParams := []interface{}{}
|
||
if vendorOrderID != "" {
|
||
sql += " AND t1.vendor_order_id = ?"
|
||
sqlParams = append(sqlParams, vendorOrderID)
|
||
}
|
||
if afsOrderID != "" {
|
||
sql += " AND t1.afs_order_id = ?"
|
||
sqlParams = append(sqlParams, afsOrderID)
|
||
}
|
||
if !utils.IsTimeZero(fromTime) {
|
||
sql += " AND t1.afs_created_at >= ?"
|
||
sqlParams = append(sqlParams, fromTime)
|
||
}
|
||
if !utils.IsTimeZero(toTime) {
|
||
sql += " AND t1.afs_created_at <= ?"
|
||
sqlParams = append(sqlParams, toTime)
|
||
}
|
||
if userID != "" {
|
||
sql += " AND t2.user_id = ?"
|
||
sqlParams = append(sqlParams, userID)
|
||
}
|
||
sql += ` ORDER BY t1.afs_order_id DESC
|
||
LIMIT ? OFFSET ?
|
||
`
|
||
sqlParams = append(sqlParams, pageSize, offset)
|
||
txDB, _ := Begin(db)
|
||
defer Commit(db, txDB)
|
||
if err = GetRowsTx(txDB, &afsOrderList, sql, sqlParams...); err == nil {
|
||
totalCount = GetLastTotalRowCount2(db, txDB)
|
||
}
|
||
return afsOrderList, totalCount, err
|
||
}
|
||
|
||
func GetOrderStoreSkusCount(db *DaoDB, storeID, skuID int, fromTime, toTime time.Time) (count int64, err error) {
|
||
tmpOrderSku := &model.OrderSku{}
|
||
sql := `
|
||
SELECT SUM(a.count) count
|
||
FROM order_sku a
|
||
JOIN goods_order b ON a.vendor_order_id = b.vendor_order_id AND a.vendor_id = b.vendor_id
|
||
WHERE IF(b.store_id = 0, b.jx_store_id, b.store_id) = ?
|
||
AND a.sku_id = ?
|
||
AND b.order_created_at BETWEEN ? AND ?
|
||
AND b.status >= ?
|
||
`
|
||
sqlParams := []interface{}{
|
||
storeID,
|
||
skuID,
|
||
fromTime,
|
||
toTime,
|
||
model.OrderStatusDelivering,
|
||
}
|
||
if err = GetRow(db, &tmpOrderSku, sql, sqlParams); err == nil {
|
||
return int64(tmpOrderSku.Count), nil
|
||
}
|
||
return count, err
|
||
}
|
||
|
||
type GetSupplySupportStoreSkusResult struct {
|
||
SkuID int `orm:"column(sku_id)" json:"skuID"`
|
||
Count int `json:"count"`
|
||
SalePrice int `json:"salePrice"`
|
||
Stock int `json:"stock"`
|
||
model.SkuName
|
||
}
|
||
|
||
func GetSupplySupportStoreSkus(db *DaoDB, fromDate, toDate time.Time, fromStoreID, storeID int, percentage float64) (getSupplySupportStoreSkusResult []*GetSupplySupportStoreSkusResult, err error) {
|
||
sql := `
|
||
SELECT c.sku_id,CEIL(c.count) count,CEIL(c.count) * d.jx_price sale_price, d.stock, f.*
|
||
FROM
|
||
(
|
||
SELECT a.sku_id,SUM(a.count * ? ) count FROM order_sku a
|
||
JOIN goods_order b ON b.vendor_order_id = a.vendor_order_id AND a.vendor_id = b.vendor_id
|
||
WHERE b.order_created_at > ?
|
||
AND b.order_created_at < ?
|
||
AND a.sku_id <> ?
|
||
AND IF(b.store_id = 0,b.jx_store_id,b.store_id) = ?
|
||
GROUP BY 1
|
||
)c
|
||
JOIN store_sku_bind d ON d.store_id = ? AND d.sku_id = c.sku_id AND d.deleted_at = ?
|
||
JOIN sku e ON e.id = d.sku_id
|
||
JOIN sku_name f ON f.id = e.name_id
|
||
WHERE d.status <> ?
|
||
AND d.stock <> ?
|
||
ORDER BY c.count desc
|
||
`
|
||
sqlParams := []interface{}{
|
||
percentage,
|
||
fromDate,
|
||
toDate,
|
||
6039481, //葱姜蒜
|
||
fromStoreID,
|
||
storeID, utils.DefaultTimeValue,
|
||
model.StoreSkuBindStatusDontSale,
|
||
0,
|
||
}
|
||
if err = GetRows(db, &getSupplySupportStoreSkusResult, sql, sqlParams); err == nil {
|
||
return getSupplySupportStoreSkusResult, err
|
||
}
|
||
return getSupplySupportStoreSkusResult, err
|
||
}
|
||
|
||
func GetPriceDefendOrder(db *DaoDB, vendorOrderID string, storeIDs, skuIDs, issues []int, defendPrice, isBuyNowPrice, isSuccess, isPay int, userID string, beginAt, EndAt time.Time, isDesc bool) (priceDefendOrders []*model.PriceDefendOrder, err error) {
|
||
sql := `
|
||
SELECT a.*
|
||
FROM price_defend_order a
|
||
JOIN user_delivery_address b ON a.address_id = b.id AND b.deleted_at = ?
|
||
WHERE 1 = 1
|
||
AND a.deleted_at = ?
|
||
`
|
||
sqlParams := []interface{}{
|
||
utils.DefaultTimeValue,
|
||
utils.DefaultTimeValue,
|
||
}
|
||
if vendorOrderID != "" {
|
||
sql += " AND a.vendor_order_id = ?"
|
||
sqlParams = append(sqlParams, vendorOrderID)
|
||
}
|
||
if len(storeIDs) > 0 {
|
||
sql += " AND a.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||
sqlParams = append(sqlParams, storeIDs)
|
||
}
|
||
if len(skuIDs) > 0 {
|
||
sql += " AND a.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
||
sqlParams = append(sqlParams, skuIDs)
|
||
}
|
||
if len(issues) > 0 {
|
||
sql += " AND a.issue IN (" + GenQuestionMarks(len(issues)) + ")"
|
||
sqlParams = append(sqlParams, issues)
|
||
}
|
||
if defendPrice != 0 {
|
||
sql += " AND a.defend_price = ?"
|
||
sqlParams = append(sqlParams, defendPrice)
|
||
}
|
||
if isBuyNowPrice != -1 {
|
||
sql += " AND a.is_buy_now_price = ?"
|
||
sqlParams = append(sqlParams, isBuyNowPrice)
|
||
}
|
||
if isSuccess != -1 {
|
||
sql += " AND a.is_success = ?"
|
||
sqlParams = append(sqlParams, isSuccess)
|
||
}
|
||
if isPay != -1 {
|
||
sql += " AND a.is_pay = ?"
|
||
sqlParams = append(sqlParams, isPay)
|
||
}
|
||
if userID != "" {
|
||
sql += " AND b.user_id = ?"
|
||
sqlParams = append(sqlParams, userID)
|
||
}
|
||
if beginAt != utils.ZeroTimeValue {
|
||
sql += " AND a.created_at >= ?"
|
||
sqlParams = append(sqlParams, beginAt)
|
||
}
|
||
if EndAt != utils.ZeroTimeValue {
|
||
sql += " AND a.created_at <= ?"
|
||
sqlParams = append(sqlParams, EndAt)
|
||
}
|
||
if isDesc {
|
||
sql += " ORDER BY a.created_at DESC"
|
||
} else {
|
||
sql += " ORDER BY a.created_at"
|
||
}
|
||
err = GetRows(db, &priceDefendOrders, sql, sqlParams)
|
||
return priceDefendOrders, err
|
||
}
|
||
|
||
func GetCoupons(db *DaoDB, couponType int, couponStatuss, storeIDs []int, userID, mobile, keyword string) (coupons []*model.Coupons, err error) {
|
||
sqlParams := []interface{}{}
|
||
sql := `
|
||
SELECT DISTINCT a.*
|
||
FROM coupons a
|
||
`
|
||
if userID != "" || mobile != "" {
|
||
sql += " JOIN user_coupons b ON a.id = b.coupon_id"
|
||
if userID != "" {
|
||
sql += " AND b.user_id = ?"
|
||
sqlParams = append(sqlParams, userID)
|
||
}
|
||
if mobile != "" {
|
||
sql += " AND b.mobile = ?"
|
||
sqlParams = append(sqlParams, mobile)
|
||
}
|
||
}
|
||
sql += `
|
||
WHERE a.is_all = ?
|
||
`
|
||
sqlParams = append(sqlParams, model.YES)
|
||
if couponType != 0 {
|
||
sql += " AND a.coupon_type = ?"
|
||
sqlParams = append(sqlParams, couponType)
|
||
}
|
||
if keyword != "" {
|
||
sql += " AND (a.name LIKE ? OR a.desc LIKE ?)"
|
||
sqlParams = append(sqlParams, "%"+keyword+"%", "%"+keyword+"%")
|
||
}
|
||
if len(couponStatuss) > 0 {
|
||
sql += " AND a.coupon_status IN (" + GenQuestionMarks(len(couponStatuss)) + ")"
|
||
sqlParams = append(sqlParams, couponStatuss)
|
||
}
|
||
sql += `
|
||
UNION
|
||
SELECT DISTINCT a.*
|
||
FROM coupons a
|
||
LEFT JOIN store_coupons b ON a.id = b.coupon_id AND b.deleted_at = ?
|
||
`
|
||
if userID != "" || mobile != "" {
|
||
sql += " JOIN user_coupons c ON a.id = c.coupon_id"
|
||
if userID != "" {
|
||
sql += " AND c.user_id = ?"
|
||
sqlParams = append(sqlParams, userID)
|
||
}
|
||
if mobile != "" {
|
||
sql += " AND c.mobile = ?"
|
||
sqlParams = append(sqlParams, mobile)
|
||
}
|
||
}
|
||
sql += `
|
||
WHERE 1 = 1
|
||
`
|
||
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
||
if couponType != 0 {
|
||
sql += " AND a.coupon_type = ?"
|
||
sqlParams = append(sqlParams, couponType)
|
||
}
|
||
if keyword != "" {
|
||
sql += " AND (a.name LIKE ? OR a.desc LIKE ?)"
|
||
sqlParams = append(sqlParams, "%"+keyword+"%", "%"+keyword+"%")
|
||
}
|
||
if len(couponStatuss) > 0 {
|
||
sql += " AND a.coupon_status IN (" + GenQuestionMarks(len(couponStatuss)) + ")"
|
||
sqlParams = append(sqlParams, couponStatuss)
|
||
}
|
||
if len(storeIDs) > 0 {
|
||
sql += " AND b.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||
sqlParams = append(sqlParams, storeIDs)
|
||
}
|
||
err = GetRows(db, &coupons, sql, sqlParams)
|
||
return coupons, err
|
||
}
|
||
|
||
func GetStoreCoupons(db *DaoDB, couponIDs, storeIDs []int) (storeCoupons []*model.StoreCoupons, err error) {
|
||
sql := `
|
||
SELECT *
|
||
FROM store_coupons
|
||
WHERE deleted_at = ?
|
||
`
|
||
sqlParams := []interface{}{utils.DefaultTimeValue}
|
||
if len(couponIDs) > 0 {
|
||
sql += " AND coupon_id IN (" + GenQuestionMarks(len(couponIDs)) + ")"
|
||
sqlParams = append(sqlParams, couponIDs)
|
||
}
|
||
if len(storeIDs) > 0 {
|
||
sql += " AND store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||
sqlParams = append(sqlParams, storeIDs)
|
||
}
|
||
err = GetRows(db, &storeCoupons, sql, sqlParams)
|
||
return storeCoupons, err
|
||
}
|
||
|
||
func GetUserCoupons(db *DaoDB, couponIDs []int, userIDs, mobiles []string, userStatus int) (userCoupons []*model.UserCoupons, err error) {
|
||
sql := `
|
||
SELECT *
|
||
FROM user_coupons
|
||
WHERE 1 = 1
|
||
`
|
||
sqlParams := []interface{}{}
|
||
if len(couponIDs) > 0 {
|
||
sql += " AND coupon_id IN (" + GenQuestionMarks(len(couponIDs)) + ")"
|
||
sqlParams = append(sqlParams, couponIDs)
|
||
}
|
||
if len(userIDs) > 0 {
|
||
sql += " AND user_id IN (" + GenQuestionMarks(len(userIDs)) + ")"
|
||
sqlParams = append(sqlParams, userIDs)
|
||
}
|
||
if len(mobiles) > 0 {
|
||
sql += " AND mobile IN (" + GenQuestionMarks(len(mobiles)) + ")"
|
||
sqlParams = append(sqlParams, mobiles)
|
||
}
|
||
if userStatus != 0 {
|
||
sql += " AND user_coupon_status = ?"
|
||
sqlParams = append(sqlParams, userStatus)
|
||
}
|
||
err = GetRows(db, &userCoupons, sql, sqlParams)
|
||
return userCoupons, err
|
||
}
|
||
|
||
type QueryOrdersForManageStateResult struct {
|
||
VendorOrderID string `orm:"column(vendor_order_id)"`
|
||
BindID int `orm:"column(bind_id)"`
|
||
}
|
||
|
||
func QueryOrdersForManageState(db *DaoDB, storeID, vendorID, status int, fromTime, toTime time.Time) (userCoupons []*QueryOrdersForManageStateResult, err error) {
|
||
sql := `
|
||
SELECT a.vendor_order_id ,b.id bind_id
|
||
FROM goods_order a
|
||
LEFT JOIN waybill b ON a.vendor_order_id = b.vendor_order_id
|
||
WHERE 1 = 1
|
||
`
|
||
sqlParams := []interface{}{}
|
||
if storeID != 0 {
|
||
sql += " AND (a.storeID = ? OR a.jx_store_id = ?)"
|
||
sqlParams = append(sqlParams, storeID, storeID)
|
||
}
|
||
if vendorID != -1 {
|
||
sql += " AND a.vendor_id = ?"
|
||
sqlParams = append(sqlParams, vendorID)
|
||
}
|
||
if status != 0 {
|
||
sql += " AND a.status = ?"
|
||
sqlParams = append(sqlParams, status)
|
||
}
|
||
if !utils.IsTimeZero(fromTime) {
|
||
sql += " AND a.order_created_at > ?"
|
||
sqlParams = append(sqlParams, fromTime)
|
||
}
|
||
if !utils.IsTimeZero(toTime) {
|
||
sql += " AND a.order_created_at < ?"
|
||
sqlParams = append(sqlParams, toTime)
|
||
}
|
||
err = GetRows(db, &userCoupons, sql, sqlParams)
|
||
return userCoupons, err
|
||
}
|