217 lines
7.7 KiB
Go
217 lines
7.7 KiB
Go
package dao
|
||
|
||
import (
|
||
"fmt"
|
||
"time"
|
||
|
||
"git.rosy.net.cn/baseapi/utils"
|
||
"git.rosy.net.cn/jx-callback/business/model"
|
||
)
|
||
|
||
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"` // 预估结算给门店老板的钱
|
||
}
|
||
|
||
func QueryOrders(db *DaoDB, 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 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 < ?
|
||
ORDER BY t1.order_created_at DESC, t1.id DESC;
|
||
`
|
||
sqlParams := []interface{}{
|
||
storeID,
|
||
orderTime,
|
||
lastOrderSeqID,
|
||
model.OrderStatusEndBegin,
|
||
}
|
||
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型的数据库返回值,会取不到
|
||
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_finished_at >= ? AND t1.order_finished_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(*) 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"
|
||
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
|
||
}
|