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"` // 预估结算给门店老板的钱 } 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"` } 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型的数据库返回值,会取不到 // 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 UpdateOrderSkuEariningPrice(db *DaoDB, actStoreSku2 *model.ActStoreSku2, fromDateParm, toDateParm time.Time) (num int64, err error) { sql := ` UPDATE order_sku t1 JOIN goods_order tt1 ON tt1.vendor_order_id = t1.vendor_order_id AND tt1.vendor_id = ? AND t1.sku_id = ? AND tt1.jx_store_id = ? AND tt1.order_created_at BETWEEN ? and ? SET t1.earning_price = ?,t1.store_sub_id = ? WHERE t1.store_sub_id = 0 ` sqlParams := []interface{}{ actStoreSku2.VendorID, actStoreSku2.SkuID, actStoreSku2.StoreID, fromDateParm, toDateParm, actStoreSku2.EarningPrice, actStoreSku2.ActID, } return ExecuteSQL(db, sql, sqlParams...) } func UpdateGoodOrderEaringPrice(db *DaoDB, fromDateParm, toDateParm time.Time) (num int64, err error) { sql := ` UPDATE goods_order t1 JOIN( SELECT IF(t0.jx_store_id > 0, t0.jx_store_id, t0.store_id) store_id, t0.vendor_id, t0.vendor_order_id, CAST(SUM(t1.count * 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, 70) / 100)) AS SIGNED) earning_price FROM goods_order t0 JOIN order_sku t1 ON t1.vendor_order_id = t0.vendor_order_id AND t1.vendor_id = t0.vendor_id LEFT JOIN store t5 ON t5.id = IF(t0.jx_store_id <> 0, t0.jx_store_id, t0.store_id) WHERE t0.order_created_at BETWEEN ? AND ? GROUP BY 1,2,3 ) t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id SET t1.earning_price = t2.earning_price WHERE t1.earning_price <> t2.earning_price ` sqlParams := []interface{}{ fromDateParm, toDateParm, } return ExecuteSQL(db, sql, sqlParams...) }