This commit is contained in:
邹宗楠
2025-12-22 17:40:50 +08:00
parent 1ad75133e5
commit 37d7e9edd8
8 changed files with 61610 additions and 61255 deletions

View File

@@ -82,10 +82,6 @@ func (c *OrderManager) OnOrderNew(order *model.GoodsOrder, orderStatus *model.Or
isDuplicated, err = c.SaveOrder(order, false, db)
}
}
if order.VendorOrderID == "601915622896866866" {
globals.SugarLogger.Debugf("-----order := %s", utils.Format4Output(order, false))
globals.SugarLogger.Debugf("-----err := %s", utils.Format4Output(err, false))
}
if err == nil {
dao.Commit(db, txDB)

View File

@@ -2,6 +2,7 @@ package dao
import (
"fmt"
"git.rosy.net.cn/jx-callback/globals"
"regexp"
"strconv"
"time"
@@ -2011,3 +2012,86 @@ func GetAddressRiderInfo(db *DaoDB, address string) ([]*CourierInfo, error) {
return courier, nil
}
func StaticStoreOrderChange(db *DaoDB, storeId []int, start, end time.Time, rank string) ([]*StoreOrderRank, error) {
dailyOrders := `
SELECT
g.jx_store_id,
DATE(g.order_created_at) AS order_date,
COUNT(g.vendor_order_id) AS order_count
FROM goods_order g WHERE 1=1 `
dailyParam := []interface{}{}
if len(storeId) != 0 {
dailyOrders += ` AND g.jx_store_id IN (` + GenQuestionMarks(len(storeId)) + `)`
dailyParam = append(dailyParam, storeId)
}
if utils.IsTimeZero(start) {
dailyOrders += ` AND g.order_created_at >= ?`
dailyParam = append(dailyParam, start)
}
if utils.IsTimeZero(end) {
dailyOrders += ` AND g.order_created_at <= ?`
dailyParam = append(dailyParam, start)
}
dailyOrders += ` AND g.status <> 115 GROUP BY g.jx_store_id,DATE(g.order_created_at) AS daily_orders `
storeTotals := `
SELECT
jx_store_id,
SUM(order_count) AS total_orders
FROM (
SELECT
g.jx_store_id,
COUNT(g.vendor_order_id) AS order_count
FROM goods_order g
WHERE 1=1 `
if len(storeId) != 0 {
storeTotals += ` AND g.jx_store_id IN (` + GenQuestionMarks(len(storeId)) + `)`
dailyParam = append(dailyParam, storeId)
}
if utils.IsTimeZero(start) {
storeTotals += ` AND g.order_created_at >= ?`
dailyParam = append(dailyParam, start)
}
if utils.IsTimeZero(end) {
storeTotals += ` AND g.order_created_at <= ?`
dailyParam = append(dailyParam, start)
}
storeTotals += ` AND g.status <> 115 GROUP BY g.jx_store_id ) AS store_counts GROUP BY jx_store_id) AS store_totals `
lastSql := `
SELECT
daily_orders.jx_store_id,
s.name,
daily_orders.order_date,
daily_orders.order_count,
store_totals.total_orders
FROM (
`
lastSql += dailyOrders
lastSql += `JOIN ` + storeTotals
lastSql += `ON daily_orders.jx_store_id = store_totals.jx_store_id
JOIN store s ON s.id = daily_orders.jx_store_id
ORDER BY store_totals.total_orders ?,daily_orders.jx_store_id,daily_orders.order_date`
if rank != "" {
dailyParam = append(dailyParam, rank)
} else {
dailyParam = append(dailyParam, "DESC")
}
globals.SugarLogger.Debugf("-----sql := %s", lastSql)
globals.SugarLogger.Debugf("-----dailyParam := %s", utils.Format4Output(dailyParam, false))
data := make([]*StoreOrderRank, 0, 0)
if err := GetRows(db, &data, lastSql, dailyParam...); err != nil {
return nil, err
}
return data, nil
}
// StoreOrderRank 门店订单排名
type StoreOrderRank struct {
JxStoreId int `json:"jx_store_id"`
Name string `json:"name"`
OrderDate string `json:"order_date"`
OrderCount int `json:"order_count"`
TotalOrders int `json:"total_orders"`
}

View File

@@ -368,15 +368,7 @@ func (c *PurchaseHandler) onOrderMsg(msg *mtwmapi.CallbackMsg) (response *mtwmap
return nil
}
if msg.Cmd == mtwmapi.MsgTypeNewOrder {
if GetOrderIDFromMsg(msg) == "601915622896866866" {
globals.SugarLogger.Debugf("-----msg := %s", utils.Format4Output(msg, false))
}
order, orderMap, err2 := c.getOrder(msg.AppID, GetOrderIDFromMsg(msg), GetVendorStoreIDFromMsg(msg))
if order.VendorOrderID == "601915622896866866" {
globals.SugarLogger.Debugf("-----order := %s", utils.Format4Output(order, false))
globals.SugarLogger.Debugf("-----orderMap := %s", utils.Format4Output(orderMap, false))
globals.SugarLogger.Debugf("-----err2 := %s", utils.Format4Output(err2, false))
}
if err = err2; err == nil {
// 存在新订单用户未支付推送,导致订单取消,但是订单又会被送出
if order.OrderSeq == 0 {

View File

@@ -566,6 +566,64 @@ func (c *OrderController) StaleIndexInfo() {
})
}
// @Title 门店订单排行统计
// @Description 门店订单排行统计
// @Param token header string true "认证token"
// @Param start query string true "起始时间"
// @Param end query string true "结束时间"
// @Param storeID query string false "门店id,[1,2,3]"
// @Param rank query string true "排序方式,订单中粮,[DESC,ASC]"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /StoreOrderRank [get]
func (c *OrderController) StoreOrderRank() {
c.callStoreOrderRank(func(params *tOrderStoreOrderRankParams) (retVal interface{}, code string, err error) {
var (
storeList []*dao.StoreWithCityName
dataList = make([]int, 0, len(storeList))
mapDataList = make(map[int]int, len(storeList))
)
timeList, err := jxutils.BatchStr2Time(params.Start, params.End)
if err != nil {
return nil, "", err
}
var storeIdList []int
if err = jxutils.Strings2Objs(params.StoreID, &storeIdList); err == nil {
return nil, "", err
}
ctx := params.Ctx
if !auth2.IsV2Token(ctx.GetToken()) {
return nil, model.ErrCodeTokenIsInvalid, model.ErrTokenIsInvalid
}
mobile, userID := ctx.GetMobileAndUserID()
if mobile == "" || userID == "" || userID == "null" || userID == "NULL" {
return nil, "", fmt.Errorf("不能得到用户手机号,%s,%s", userID, mobile)
}
if permission.IsRoled(ctx) {
if storeList, err = cms.GetStoreList4User(ctx, mobile, userID); err == nil && len(storeList) > 0 {
for _, v := range storeList {
dataList = append(dataList, v.Store.ID)
mapDataList[v.Store.ID] = model.YES
}
}
if len(storeIdList) != model.NO {
for _, sl := range storeIdList {
if mapDataList[sl] != model.YES {
return retVal, "", fmt.Errorf("此门店%d,不归属于该用户%s", sl, ctx.GetUserName())
}
}
}
}
if len(storeIdList) == model.NO {
storeIdList = dataList
}
retVal, err = dao.StaticStoreOrderChange(dao.GetDB(), storeIdList, timeList[0], timeList[1], params.Rank)
return retVal, "", err
})
}
// @Title 刷新订单真实手机号
// @Description 刷新订单真实手机号
// @Param token header string true "认证token"

View File

@@ -1559,6 +1559,15 @@ func init() {
MethodParams: param.Make(),
Filters: nil,
Params: nil})
// 首页统计门店订单情况
web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
web.ControllerComments{
Method: "StoreOrderRank",
Router: `/StoreOrderRank`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
web.ControllerComments{

File diff suppressed because it is too large Load Diff

View File

@@ -13334,6 +13334,56 @@
}
}
},
"/order/StoreOrderRank": {
"get": {
"tags": [
"order"
],
"description": "门店订单排行统计",
"operationId": "OrderController.门店订单排行统计",
"parameters": [
{
"in": "header",
"name": "token",
"description": "认证token",
"required": true,
"type": "string"
},
{
"in": "query",
"name": "start",
"description": "起始时间",
"required": true,
"type": "string"
},
{
"in": "query",
"name": "end",
"description": "结束时间",
"required": true,
"type": "string"
},
{
"in": "query",
"name": "storeID",
"description": "门店id,[1,2,3]",
"type": "string"
},
{
"in": "query",
"name": "rank",
"description": "排序方式,订单中粮,[DESC,ASC]",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "{object} controllers.CallResult"
}
}
}
},
"/order/TransferJdsOrder": {
"post": {
"tags": [

View File

@@ -9036,6 +9036,40 @@ paths:
responses:
"200":
description: '{object} controllers.CallResult'
/order/StoreOrderRank:
get:
tags:
- order
description: 门店订单排行统计
operationId: OrderController.门店订单排行统计
parameters:
- in: header
name: token
description: 认证token
required: true
type: string
- in: query
name: start
description: 起始时间
required: true
type: string
- in: query
name: end
description: 结束时间
required: true
type: string
- in: query
name: storeID
description: 门店id,[1,2,3]
type: string
- in: query
name: rank
description: 排序方式,订单中粮,[DESC,ASC]
required: true
type: string
responses:
"200":
description: '{object} controllers.CallResult'
/order/TransferJdsOrder:
post:
tags: