1
This commit is contained in:
@@ -3,6 +3,7 @@ package dao
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/jx-print/dao"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -1749,3 +1750,179 @@ func StatisticsFineFee(db *DaoDB, startTime, endTime time.Time, storeId []int) (
|
||||
|
||||
return fine, nil
|
||||
}
|
||||
|
||||
// StatisticsSettlement 统计京西门店结算信息
|
||||
func StatisticsSettlement(db *DaoDB, storeId []int, start, end time.Time, vendorId []int, size, offset int) (pagedInfo *model.PagedInfo, err error) {
|
||||
sql := `
|
||||
SELECT
|
||||
SQL_CALC_FOUND_ROWS
|
||||
gs.jx_store_id,
|
||||
s.name,
|
||||
b.id AS brand_id,
|
||||
b.name AS brand_name,
|
||||
sm1.vendor_store_id AS mt_store_id,
|
||||
sm2.vendor_store_id AS jd_store_id,
|
||||
sm3.vendor_store_id AS sg_store_id,
|
||||
city.name AS city_name,
|
||||
district.name AS district_name,
|
||||
s.market_man_phone,
|
||||
u_market.name AS market_man_name, -- 修正别名
|
||||
u_operator1.name AS operator1_name,
|
||||
u_operator2.name AS operator2_name,
|
||||
u_operator3.name AS operator3_name,
|
||||
s.jx_brand_fee_factor,
|
||||
s.market_add_fee_factor,
|
||||
s.pay_percentage,
|
||||
COALESCE(COUNT(gs.vendor_order_id), 0) AS order_count, -- 处理 NULL
|
||||
COALESCE(SUM(w.desired_fee), 0) AS total_desired_fee,
|
||||
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-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.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.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(gs.total_shop_money), 0) AS total_shop_money,-- 平台结算
|
||||
COALESCE(SUM(ao.refund_money), 0) AS refund_money -- 售后退款
|
||||
FROM goods_order gs
|
||||
LEFT JOIN store_map sm1 ON gs.jx_store_id = sm1.store_id AND sm1.vendor_id = 1 AND sm1.deleted_at = '1970-01-01 00:00:00'
|
||||
LEFT JOIN store_map sm2 ON gs.jx_store_id = sm2.store_id AND sm2.vendor_id = 0 AND sm2.deleted_at = '1970-01-01 00:00:00'
|
||||
LEFT JOIN store_map sm3 ON gs.jx_store_id = sm3.store_id AND sm3.vendor_id = 3 AND sm3.deleted_at = '1970-01-01 00:00:00'
|
||||
LEFT JOIN store s ON s.id = gs.jx_store_id
|
||||
LEFT JOIN brand b ON b.id = s.brand_id
|
||||
LEFT JOIN place city ON city.code = s.city_code
|
||||
LEFT JOIN place district ON district.code = s.district_code -- 别名避免歧义
|
||||
LEFT JOIN user u_market ON u_market.mobile = s.market_man_phone
|
||||
LEFT JOIN user u_operator1 ON u_operator1.mobile = s.operator_phone
|
||||
LEFT JOIN user u_operator2 ON u_operator2.mobile = s.operator_phone2
|
||||
LEFT JOIN user u_operator3 ON u_operator3.mobile = s.operator_phone3
|
||||
LEFT JOIN waybill w ON w.vendor_order_id = gs.vendor_order_id AND w.status IN (100,105)
|
||||
LEFT JOIN afs_order ao ON ao.vendor_order_id = gs.vendor_order_id AND ao.status IN (160,180)
|
||||
WHERE 1=1
|
||||
`
|
||||
param := []interface{}{}
|
||||
if !utils.IsTimeZero(start) && !utils.IsTimeZero(end) {
|
||||
sql += ` AND gs.order_created_at BETWEEN ? AND ? AND gs.status = 110 `
|
||||
param = append(param, start, end)
|
||||
}
|
||||
if len(storeId) != 0 {
|
||||
sql += ` AND IF(gs.jx_store_id != 0, gs.jx_store_id, gs.store_id) IN (` + dao.GenQuestionMarks(len(storeId)) + `)`
|
||||
param = append(param, vendorId)
|
||||
}
|
||||
if len(vendorId) != 0 {
|
||||
sql += ` AND gs.vendor_id IN (` + GenQuestionMarks(len(vendorId)) + `)`
|
||||
param = append(param, vendorId)
|
||||
}
|
||||
sql += ` AND s.deleted_at = ? `
|
||||
param = append(param, utils.DefaultTimeValue)
|
||||
|
||||
sql += `
|
||||
GROUP BY
|
||||
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,
|
||||
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 ?
|
||||
`
|
||||
param = append(param, size, offset)
|
||||
|
||||
txDB, _ := Begin(db)
|
||||
defer Commit(db, txDB)
|
||||
var msgList []*model.JxSettlementInfo
|
||||
if err = GetRowsTx(txDB, &msgList, sql, param...); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(msgList) > 0 {
|
||||
for _, v := range msgList {
|
||||
if v.BrandId == 1 || v.BrandId == 38 { // 京西/好菜
|
||||
// 袋子费
|
||||
v.PackagingFee = 40 * v.OrderCount
|
||||
} else {
|
||||
if v.PayPercentage != 0 && v.JxIncome == 0 {
|
||||
v.JxIncome = float64(v.TotalShopMoney) - v.StoreInCome
|
||||
}
|
||||
}
|
||||
// 服务费
|
||||
v.PackageSetting = v.PackageSetting * v.OrderCount
|
||||
v.Profit = v.JxIncome + v.MarketIncome - float64(v.PackagingFee) + float64(v.PackageSetting)
|
||||
}
|
||||
}
|
||||
pagedInfo = &model.PagedInfo{
|
||||
TotalCount: GetLastTotalRowCount2(db, txDB),
|
||||
Data: msgList,
|
||||
}
|
||||
return pagedInfo, nil
|
||||
}
|
||||
|
||||
// StatisticsSettlementByCity 根据城市统计结算
|
||||
func StatisticsSettlementByCity(db *DaoDB, cityCode []string, start, end time.Time, vendorId []int, size, offset int) (pagedInfo *model.PagedInfo, err error) {
|
||||
sql := `
|
||||
SELECT
|
||||
SQL_CALC_FOUND_ROWS
|
||||
p.name AS city_name,
|
||||
s.id AS store_id,
|
||||
u.name AS user_name,
|
||||
u.mobile,
|
||||
s.brand_id,
|
||||
s.package_setting,
|
||||
COUNT(gs.vendor_order_id) AS order_count,
|
||||
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-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.earning_price, gs.total_shop_money- (gs.total_shop_money *(gs.order_pay_percentage/2)/100)) -IFNULL(w.desired_fee,0),3)) 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-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 -- 售后退款
|
||||
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 store s ON s.id = IF(gs.jx_store_id != 0, gs.jx_store_id, gs.store_id)
|
||||
LEFT JOIN user u ON u.mobile = s.market_man_phone
|
||||
LEFT JOIN place p ON p.code = s.city_code
|
||||
LEFT JOIN afs_order ao ON ao.vendor_order_id = gs.vendor_order_id AND ao.status IN (160, 180)
|
||||
WHERE 1=1
|
||||
`
|
||||
param := []interface{}{}
|
||||
if !utils.IsTimeZero(start) && !utils.IsTimeZero(end) {
|
||||
sql += ` AND gs.order_created_at BETWEEN ? AND ? AND gs.status = 110 `
|
||||
param = append(param, start, end)
|
||||
}
|
||||
if len(vendorId) != 0 {
|
||||
sql += ` AND gs.vendor_id IN (` + GenQuestionMarks(len(vendorId)) + `)`
|
||||
param = append(param, vendorId)
|
||||
}
|
||||
if len(cityCode) != 0 {
|
||||
sql += ` AND s.city_code IN (` + dao.GenQuestionMarks(len(cityCode)) + `)`
|
||||
param = append(param, vendorId)
|
||||
}
|
||||
|
||||
sql += ` AND s.deleted_at = ? `
|
||||
param = append(param, utils.DefaultTimeValue)
|
||||
|
||||
sql += `
|
||||
GROUP BY
|
||||
u.name, u.mobile ,p.name,s.id ORDER BY mobile desc LIMIT ? OFFSET ?
|
||||
`
|
||||
param = append(param, size, offset)
|
||||
|
||||
txDB, _ := Begin(db)
|
||||
defer Commit(db, txDB)
|
||||
var msgList []*model.SettlementByCityCode
|
||||
if err = GetRowsTx(txDB, &msgList, sql, param...); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(msgList) > 0 {
|
||||
for _, v := range msgList {
|
||||
if v.BrandId == 1 || v.BrandId == 38 { // 京西/好菜
|
||||
// 袋子费
|
||||
v.PackagingFee = 40 * v.OrderCount
|
||||
}
|
||||
// 服务费
|
||||
v.PackageSetting = v.PackageSetting * v.OrderCount
|
||||
v.Profit = v.JxIncome + v.MarketIncome - float64(v.PackagingFee) + float64(v.PackageSetting)
|
||||
}
|
||||
}
|
||||
pagedInfo = &model.PagedInfo{
|
||||
TotalCount: GetLastTotalRowCount2(db, txDB),
|
||||
Data: msgList,
|
||||
}
|
||||
return pagedInfo, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user