This commit is contained in:
邹宗楠
2026-01-09 13:50:26 +08:00
parent 2ede1d1153
commit 3bc4795a5c
6 changed files with 62958 additions and 62861 deletions

View File

@@ -6751,11 +6751,11 @@ func Time2Week(t time.Time) int {
} }
// GetStoreSettlementList 根据门店统计结算信息 // GetStoreSettlementList 根据门店统计结算信息
func GetStoreSettlementList(storeId []int, start, end time.Time, vendorId []int, size, offset int) (*model.PagedInfo, error) { func GetStoreSettlementList(storeId []int, start, end time.Time, vendorId []int, size, offset int, rank string) (*model.PagedInfo, error) {
return dao.StatisticsSettlement(dao.GetDB(), storeId, start, end, vendorId, size, offset) return dao.StatisticsSettlement(dao.GetDB(), storeId, start, end, vendorId, size, offset, rank)
} }
// GetCityCodeSettlementList 根据城市统计结算 // GetCityCodeSettlementList 根据城市统计结算
func GetCityCodeSettlementList(cityCode []string, start, end time.Time, vendorId []int, size, offset int) (*model.PagedInfo, error) { func GetCityCodeSettlementList(cityCode []string, start, end time.Time, vendorId []int, size, offset int, rank string) (*model.PagedInfo, error) {
return dao.StatisticsSettlementByCity(dao.GetDB(), cityCode, start, end, vendorId, size, offset) return dao.StatisticsSettlementByCity(dao.GetDB(), cityCode, start, end, vendorId, size, offset, rank)
} }

View File

@@ -1752,7 +1752,7 @@ func StatisticsFineFee(db *DaoDB, startTime, endTime time.Time, storeId []int) (
} }
// StatisticsSettlement 统计京西门店结算信息 // StatisticsSettlement 统计京西门店结算信息
func StatisticsSettlement(db *DaoDB, storeId []int, start, end time.Time, vendorId []int, size, offset int) (pagedInfo *model.PagedInfo, err error) { func StatisticsSettlement(db *DaoDB, storeId []int, start, end time.Time, vendorId []int, size, offset int, rank string) (pagedInfo *model.PagedInfo, err error) {
sql := ` sql := `
SELECT SELECT
SQL_CALC_FOUND_ROWS SQL_CALC_FOUND_ROWS
@@ -1776,10 +1776,10 @@ func StatisticsSettlement(db *DaoDB, storeId []int, start, end time.Time, vendor
COALESCE(COUNT(gs.vendor_order_id), 0) AS order_count, -- 处理 NULL COALESCE(COUNT(gs.vendor_order_id), 0) AS order_count, -- 处理 NULL
COALESCE(SUM(w.desired_fee), 0) AS total_desired_fee, COALESCE(SUM(w.desired_fee), 0) AS total_desired_fee,
s.package_setting, s.package_setting,
SUM(ROUND(IF(gs.earning_type = 1, (gs.total_shop_money-gs.earning_price-IFNULL(w.desired_fee,0)), gs.total_shop_money *(gs.order_pay_percentage/2)/100) * (s.jx_brand_fee_factor/10),3)) jx_income, SUM(ROUND(IF(gs.earning_type = 1, (gs.total_shop_money-gs.earning_price), gs.total_shop_money *(gs.order_pay_percentage/2)/100) * (s.jx_brand_fee_factor/10),3)-IFNULL(w.desired_fee,0)) jx_income,
SUM(ROUND(IF(gs.earning_type = 1, (gs.total_shop_money-gs.earning_price-IFNULL(w.desired_fee,0)) , gs.total_shop_money *(gs.order_pay_percentage/2)/100) * (s.market_add_fee_factor/10),3)) market_income, SUM(ROUND(IF(gs.earning_type = 1, (gs.total_shop_money-gs.earning_price-IFNULL(w.desired_fee,0)) , gs.total_shop_money *(gs.order_pay_percentage/2)/100) * (s.market_add_fee_factor/10),3)-IFNULL(w.desired_fee,0)) market_income,
SUM(ROUND(IF(gs.earning_type = 1, gs.earning_price, gs.total_shop_money- (gs.total_shop_money *(gs.order_pay_percentage/2)/100)) -IFNULL(w.desired_fee,0),3)) store_income, SUM(ROUND(IF(gs.earning_type = 1, gs.earning_price, gs.total_shop_money- (gs.total_shop_money *(gs.order_pay_percentage/2)/100)) -IFNULL(w.desired_fee,0),3)-s.package_setting) store_income,
SUM(ROUND(IF(gs.earning_type = 1, gs.total_shop_money-gs.earning_price-IFNULL(w.desired_fee,0), gs.total_shop_money- (gs.total_shop_money *(1-(gs.order_pay_percentage/2)/100))) -IFNULL(w.desired_fee,0),3)) platform_income, SUM(ROUND(IF(gs.earning_type = 1, gs.total_shop_money-gs.earning_price, gs.total_shop_money- (gs.total_shop_money *(1-(gs.order_pay_percentage/2)/100))) ,3)-IFNULL(w.desired_fee,0)) platform_income,
COALESCE(SUM(gs.total_shop_money), 0) AS total_shop_money,-- 平台结算 COALESCE(SUM(gs.total_shop_money), 0) AS total_shop_money,-- 平台结算
COALESCE(SUM(ao.refund_money), 0) AS refund_money -- 售后退款 COALESCE(SUM(ao.refund_money), 0) AS refund_money -- 售后退款
FROM goods_order gs FROM goods_order gs
@@ -1800,7 +1800,7 @@ func StatisticsSettlement(db *DaoDB, storeId []int, start, end time.Time, vendor
` `
param := []interface{}{} param := []interface{}{}
if !utils.IsTimeZero(start) && !utils.IsTimeZero(end) { if !utils.IsTimeZero(start) && !utils.IsTimeZero(end) {
sql += ` AND gs.order_created_at BETWEEN ? AND ? AND gs.status = 110 ` sql += ` AND gs.order_finished_at BETWEEN ? AND ? AND gs.status = 110 `
param = append(param, start, end) param = append(param, start, end)
} }
if len(storeId) != 0 { if len(storeId) != 0 {
@@ -1819,8 +1819,15 @@ func StatisticsSettlement(db *DaoDB, storeId []int, start, end time.Time, vendor
s.id, s.name, sm1.vendor_store_id, sm2.vendor_store_id, sm3.vendor_store_id, s.id, s.name, sm1.vendor_store_id, sm2.vendor_store_id, sm3.vendor_store_id,
city.name, district.name, s.market_man_phone, u_market.name, city.name, district.name, s.market_man_phone, u_market.name,
u_operator1.name, u_operator2.name, u_operator3.name, u_operator1.name, u_operator2.name, u_operator3.name,
s.jx_brand_fee_factor, s.market_add_fee_factor, s.pay_percentage, s.package_setting ORDER BY order_count desc LIMIT ? OFFSET ? s.jx_brand_fee_factor, s.market_add_fee_factor, s.pay_percentage, s.package_setting `
` if rank != "" {
fields := strings.Split(rank, ",")
sql += fmt.Sprintf(` ORDER BY %s %s `, fields[0], fields[1])
} else {
sql += fmt.Sprintf(`ORDER BY order_count desc`)
}
sql += ` LIMIT ? OFFSET ?`
param = append(param, size, offset) param = append(param, size, offset)
txDB, _ := Begin(db) txDB, _ := Begin(db)
@@ -1832,17 +1839,21 @@ func StatisticsSettlement(db *DaoDB, storeId []int, start, end time.Time, vendor
if len(msgList) > 0 { if len(msgList) > 0 {
for _, v := range msgList { for _, v := range msgList {
// 服务费
v.PackageSetting = v.PackageSetting * v.OrderCount
if v.BrandId == 1 || v.BrandId == 38 { // 京西/好菜 if v.BrandId == 1 || v.BrandId == 38 { // 京西/好菜
// 袋子费 // 袋子费
v.PackagingFee = 40 * v.OrderCount v.PackagingFee = 40 * v.OrderCount
v.JxIncome -= float64(v.PackagingFee)
v.MarketIncome -= float64(v.PackagingFee)
v.StoreIncome -= float64(v.PackagingFee)
} else { } else {
if v.PayPercentage != 0 && v.JxIncome == 0 { if v.PayPercentage != 0 && v.JxIncome == 0 {
v.JxIncome = float64(v.TotalShopMoney) - v.StoreIncome v.JxIncome = float64(v.TotalShopMoney) - v.StoreIncome
} }
} }
// 服务费
v.PackageSetting = v.PackageSetting * v.OrderCount v.Profit = v.JxIncome + v.MarketIncome + float64(v.PackageSetting)
v.Profit = v.JxIncome + v.MarketIncome - float64(v.PackagingFee) + float64(v.PackageSetting)
} }
} }
pagedInfo = &model.PagedInfo{ pagedInfo = &model.PagedInfo{
@@ -1853,24 +1864,23 @@ func StatisticsSettlement(db *DaoDB, storeId []int, start, end time.Time, vendor
} }
// StatisticsSettlementByCity 根据城市统计结算 // StatisticsSettlementByCity 根据城市统计结算
func StatisticsSettlementByCity(db *DaoDB, cityCode []string, start, end time.Time, vendorId []int, size, offset int) (pagedInfo *model.PagedInfo, err error) { func StatisticsSettlementByCity(db *DaoDB, cityCode []string, start, end time.Time, vendorId []int, size, offset int, rank string) (pagedInfo *model.PagedInfo, err error) {
sql := ` sql := `
SELECT SELECT
SQL_CALC_FOUND_ROWS SQL_CALC_FOUND_ROWS
p.name AS city_name, p.name AS city_name,
s.id AS jx_store_id,
u.name AS user_name, u.name AS user_name,
u.mobile, u.mobile,
s.brand_id, s.brand_id,
s.package_setting, s.package_setting,
COUNT(gs.vendor_order_id) AS order_count, COUNT(gs.vendor_order_id) AS order_count,
COALESCE(SUM(w.desired_fee), 0) AS total_desired_fee, COALESCE(SUM(w.desired_fee), 0) AS total_desired_fee,
SUM(ROUND(IF(gs.earning_type = 1, (gs.total_shop_money-gs.earning_price-IFNULL(w.desired_fee,0)), gs.total_shop_money *(gs.order_pay_percentage/2)/100) * (s.jx_brand_fee_factor/10),3)) jx_income, SUM(ROUND(IF(gs.earning_type = 1, (gs.total_shop_money-gs.earning_price), gs.total_shop_money *(gs.order_pay_percentage/2)/100) * (s.jx_brand_fee_factor/10),3)-IFNULL(w.desired_fee,0)) jx_income,
SUM(ROUND(IF(gs.earning_type = 1, (gs.total_shop_money-gs.earning_price-IFNULL(w.desired_fee,0)) , gs.total_shop_money *(gs.order_pay_percentage/2)/100) * (s.market_add_fee_factor/10),3)) market_income, SUM(ROUND(IF(gs.earning_type = 1, (gs.total_shop_money-gs.earning_price-IFNULL(w.desired_fee,0)) , gs.total_shop_money *(gs.order_pay_percentage/2)/100) * (s.market_add_fee_factor/10),3)-IFNULL(w.desired_fee,0)) market_income,
SUM(ROUND(IF(gs.earning_type = 1, gs.earning_price, gs.total_shop_money- (gs.total_shop_money *(gs.order_pay_percentage/2)/100)) -IFNULL(w.desired_fee,0),3)) store_income, SUM(ROUND(IF(gs.earning_type = 1, gs.earning_price, gs.total_shop_money- (gs.total_shop_money *(gs.order_pay_percentage/2)/100)) -IFNULL(w.desired_fee,0),3)-s.package_setting) store_income,
COALESCE(SUM(gs.total_shop_money), 0) AS total_shop_money,-- 平台结算 SUM(ROUND(IF(gs.earning_type = 1, gs.total_shop_money-gs.earning_price, gs.total_shop_money- (gs.total_shop_money *(1-(gs.order_pay_percentage/2)/100))) ,3)-IFNULL(w.desired_fee,0)) platform_income,
SUM(ROUND(IF(gs.earning_type = 1, gs.total_shop_money-gs.earning_price-IFNULL(w.desired_fee,0), gs.total_shop_money- (gs.total_shop_money *(1-(gs.order_pay_percentage/2)/100))) -IFNULL(w.desired_fee,0),3)) platform_income, COALESCE(SUM(ao.refund_money), 0) AS refund_money, -- 售后退款
COALESCE(SUM(ao.refund_money), 0) AS refund_money -- 售后退款 COALESCE(SUM(gs.total_shop_money), 0) AS total_shop_money -- 平台结算
FROM goods_order gs FROM goods_order gs
LEFT JOIN waybill w ON w.vendor_order_id = gs.vendor_order_id AND w.status IN (100,105) LEFT JOIN waybill w ON w.vendor_order_id = gs.vendor_order_id AND w.status IN (100,105)
LEFT JOIN store s ON s.id = IF(gs.jx_store_id != 0, gs.jx_store_id, gs.store_id) LEFT JOIN store s ON s.id = IF(gs.jx_store_id != 0, gs.jx_store_id, gs.store_id)
@@ -1881,7 +1891,7 @@ func StatisticsSettlementByCity(db *DaoDB, cityCode []string, start, end time.Ti
` `
param := []interface{}{} param := []interface{}{}
if !utils.IsTimeZero(start) && !utils.IsTimeZero(end) { if !utils.IsTimeZero(start) && !utils.IsTimeZero(end) {
sql += ` AND gs.order_created_at BETWEEN ? AND ? AND gs.status = 110 ` sql += ` AND gs.order_finished_at BETWEEN ? AND ? AND gs.status = 110 `
param = append(param, start, end) param = append(param, start, end)
} }
if len(vendorId) != 0 { if len(vendorId) != 0 {
@@ -1896,10 +1906,16 @@ func StatisticsSettlementByCity(db *DaoDB, cityCode []string, start, end time.Ti
sql += ` AND s.deleted_at = ? ` sql += ` AND s.deleted_at = ? `
param = append(param, utils.DefaultTimeValue) param = append(param, utils.DefaultTimeValue)
sql += ` sql += ` GROUP BY p.name,u.name, u.mobile,s.id `
GROUP BY
u.name, u.mobile ,p.name,s.id ORDER BY order_count desc LIMIT ? OFFSET ? if rank != "" {
` fields := strings.Split(rank, ",")
sql += fmt.Sprintf(` ORDER BY %s %s `, fields[0], fields[1])
} else {
sql += fmt.Sprintf(`ORDER BY order_count desc`)
}
sql += ` LIMIT ? OFFSET ?`
param = append(param, size, offset) param = append(param, size, offset)
txDB, _ := Begin(db) txDB, _ := Begin(db)
@@ -1911,15 +1927,20 @@ func StatisticsSettlementByCity(db *DaoDB, cityCode []string, start, end time.Ti
if len(msgList) > 0 { if len(msgList) > 0 {
for _, v := range msgList { for _, v := range msgList {
// 服务费
v.PackageSetting = v.PackageSetting * v.OrderCount
if v.BrandId == 1 || v.BrandId == 38 { // 京西/好菜 if v.BrandId == 1 || v.BrandId == 38 { // 京西/好菜
// 袋子费 // 袋子费
v.PackagingFee = 40 * v.OrderCount v.PackagingFee = 40 * v.OrderCount
v.JxIncome -= float64(v.PackagingFee)
v.MarketIncome -= float64(v.PackagingFee)
v.StoreInCome -= float64(v.PackagingFee)
} }
// 服务费
v.PackageSetting = v.PackageSetting * v.OrderCount v.Profit = v.JxIncome + v.MarketIncome + float64(v.PackageSetting)
v.Profit = v.JxIncome + v.MarketIncome - float64(v.PackagingFee) + float64(v.PackageSetting)
} }
} }
pagedInfo = &model.PagedInfo{ pagedInfo = &model.PagedInfo{
TotalCount: GetLastTotalRowCount2(db, txDB), TotalCount: GetLastTotalRowCount2(db, txDB),
Data: msgList, Data: msgList,

View File

@@ -146,6 +146,7 @@ func (c *StoreController) GetStoreFineDesc() {
// @Param end query string true "结束时间1970-01-01 23:59:59" // @Param end query string true "结束时间1970-01-01 23:59:59"
// @Param size query int true "每页最大数" // @Param size query int true "每页最大数"
// @Param offset query int true "跳过数量" // @Param offset query int true "跳过数量"
// @Param ranke query string true "排序字段 order_count,desc"
// @Success 200 {object} controllers.CallResult // @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult
// @router /GetStoreSettlementInfo [get] // @router /GetStoreSettlementInfo [get]
@@ -160,7 +161,7 @@ func (c *StoreController) GetStoreSettlementInfo() {
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDList, params.VendorIds, &vendorIdList); err != nil { if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDList, params.VendorIds, &vendorIdList); err != nil {
return nil, "", err return nil, "", err
} }
retVal, err = cms.GetStoreSettlementList(storeIDList, timeList[0], timeList[1], vendorIdList, params.Size, params.Offset) retVal, err = cms.GetStoreSettlementList(storeIDList, timeList[0], timeList[1], vendorIdList, params.Size, params.Offset, params.Ranke)
return return
}) })
} }
@@ -174,6 +175,7 @@ func (c *StoreController) GetStoreSettlementInfo() {
// @Param end query string true "结束时间1970-01-01 23:59:59" // @Param end query string true "结束时间1970-01-01 23:59:59"
// @Param size query int true "每页最大数" // @Param size query int true "每页最大数"
// @Param offset query int true "跳过数量" // @Param offset query int true "跳过数量"
// @Param ranke query string true "排序字段 order_count,desc"
// @Success 200 {object} controllers.CallResult // @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult
// @router /GetCitySettlementInfo [get] // @router /GetCitySettlementInfo [get]
@@ -188,7 +190,7 @@ func (c *StoreController) GetCitySettlementInfo() {
if err = jxutils.Strings2Objs(params.CityCode, &cityList, params.VendorIds, &vendorIdList); err != nil { if err = jxutils.Strings2Objs(params.CityCode, &cityList, params.VendorIds, &vendorIdList); err != nil {
return nil, "", err return nil, "", err
} }
retVal, err = cms.GetCityCodeSettlementList(cityList, timeList[0], timeList[1], vendorIdList, params.Size, params.Offset) retVal, err = cms.GetCityCodeSettlementList(cityList, timeList[0], timeList[1], vendorIdList, params.Size, params.Offset, params.Ranke)
return return
}) })
} }

File diff suppressed because it is too large Load Diff

View File

@@ -18591,6 +18591,13 @@
"description": "根据城市code统计京西收益", "description": "根据城市code统计京西收益",
"operationId": "StoreController.根据城市code统计京西收益", "operationId": "StoreController.根据城市code统计京西收益",
"parameters": [ "parameters": [
{
"in": "header",
"name": "token",
"description": "认证token",
"required": true,
"type": "string"
},
{ {
"in": "query", "in": "query",
"name": "cityCode", "name": "cityCode",
@@ -18632,6 +18639,13 @@
"required": true, "required": true,
"type": "integer", "type": "integer",
"format": "int64" "format": "int64"
},
{
"in": "query",
"name": "ranke",
"description": "排序字段 order_count,desc",
"required": true,
"type": "string"
} }
], ],
"responses": { "responses": {
@@ -19583,6 +19597,13 @@
"description": "统计门店订单结算以及京西收益,与美团订单对比", "description": "统计门店订单结算以及京西收益,与美团订单对比",
"operationId": "StoreController.统计门店订单结算以及京西收益,与美团订单对比", "operationId": "StoreController.统计门店订单结算以及京西收益,与美团订单对比",
"parameters": [ "parameters": [
{
"in": "header",
"name": "token",
"description": "认证token",
"required": true,
"type": "string"
},
{ {
"in": "query", "in": "query",
"name": "storeIDs", "name": "storeIDs",
@@ -19624,6 +19645,13 @@
"required": true, "required": true,
"type": "integer", "type": "integer",
"format": "int64" "format": "int64"
},
{
"in": "query",
"name": "ranke",
"description": "排序字段 order_count,desc",
"required": true,
"type": "string"
} }
], ],
"responses": { "responses": {

View File

@@ -12620,6 +12620,11 @@ paths:
description: 根据城市code统计京西收益 description: 根据城市code统计京西收益
operationId: StoreController.根据城市code统计京西收益 operationId: StoreController.根据城市code统计京西收益
parameters: parameters:
- in: header
name: token
description: 认证token
required: true
type: string
- in: query - in: query
name: cityCode name: cityCode
description: 京西门店城市列表[1,2,3],缺省不限制 description: 京西门店城市列表[1,2,3],缺省不限制
@@ -12650,6 +12655,11 @@ paths:
required: true required: true
type: integer type: integer
format: int64 format: int64
- in: query
name: ranke
description: 排序字段 order_count,desc
required: true
type: string
responses: responses:
"200": "200":
description: '{object} controllers.CallResult' description: '{object} controllers.CallResult'
@@ -13294,6 +13304,11 @@ paths:
description: 统计门店订单结算以及京西收益,与美团订单对比 description: 统计门店订单结算以及京西收益,与美团订单对比
operationId: StoreController.统计门店订单结算以及京西收益,与美团订单对比 operationId: StoreController.统计门店订单结算以及京西收益,与美团订单对比
parameters: parameters:
- in: header
name: token
description: 认证token
required: true
type: string
- in: query - in: query
name: storeIDs name: storeIDs
description: 京西门店ID列表[1,2,3],缺省不限制 description: 京西门店ID列表[1,2,3],缺省不限制
@@ -13324,6 +13339,11 @@ paths:
required: true required: true
type: integer type: integer
format: int64 format: int64
- in: query
name: ranke
description: 排序字段 order_count,desc
required: true
type: string
responses: responses:
"200": "200":
description: '{object} controllers.CallResult' description: '{object} controllers.CallResult'