@@ -36,6 +36,22 @@ func MerchantFindByMobileOrId(Db *xorm.Engine, mobileOrId string) (*model.O2oMer | |||||
} | } | ||||
return &m, nil | return &m, nil | ||||
} | } | ||||
func MerchantUpdateWithSession(sess *xorm.Session, merchant *model.O2oMerchant, forceCols ...string) (int64, error) { | |||||
var ( | |||||
affected int64 | |||||
err error | |||||
) | |||||
if forceCols != nil { | |||||
affected, err = sess.Where("id = ?", merchant.Id).Cols(forceCols...).Update(merchant) | |||||
} else { | |||||
affected, err = sess.Where("id = ?", merchant.Id).Update(merchant) | |||||
} | |||||
if err != nil { | |||||
return 0, err | |||||
} | |||||
return affected, nil | |||||
} | |||||
func MerchantFindByUId(Db *xorm.Engine, uid string) (*model.O2oMerchant, error) { | func MerchantFindByUId(Db *xorm.Engine, uid string) (*model.O2oMerchant, error) { | ||||
var m model.O2oMerchant | var m model.O2oMerchant | ||||
if has, err := Db.Where("uid = ?", uid). | if has, err := Db.Where("uid = ?", uid). | ||||
@@ -13,3 +13,11 @@ func GetStoreCommissionRelate(eg *xorm.Engine, oid, pvd string) (*model.StoreCom | |||||
} | } | ||||
return &ord, nil | return &ord, nil | ||||
} | } | ||||
func GetStoreCommissionRelateWithSession(session *xorm.Session, oid, pvd string) (*model.StoreCommissionRelate, error) { | |||||
var ord model.StoreCommissionRelate | |||||
has, err := session.Where("oid=? and pvd=?", oid, pvd).Get(&ord) | |||||
if has == false || err != nil { | |||||
return nil, err | |||||
} | |||||
return &ord, nil | |||||
} |
@@ -0,0 +1,31 @@ | |||||
package model | |||||
import ( | |||||
"time" | |||||
) | |||||
type O2oFinUserFlow struct { | |||||
Id int64 `json:"id" xorm:"pk autoincr comment('流水编号') BIGINT(20)"` | |||||
Uid int `json:"uid" xorm:"not null default 0 comment('用户id') INT(11)"` | |||||
MerchantId int `json:"merchant_id" xorm:"default 0 comment('商家id') INT(11)"` | |||||
StoreId int `json:"store_id" xorm:"default 0 comment('店铺id') INT(11)"` | |||||
Type int `json:"type" xorm:"not null default 0 comment('0收入,1支出') TINYINT(1)"` | |||||
Amount string `json:"amount" xorm:"not null default 0.0000 comment('变动金额') DECIMAL(11,4)"` | |||||
BeforeAmount string `json:"before_amount" xorm:"not null default 0.0000 comment('变动前金额') DECIMAL(11,4)"` | |||||
AfterAmount string `json:"after_amount" xorm:"not null default 0.0000 comment('变动后金额') DECIMAL(11,4)"` | |||||
SysFee string `json:"sys_fee" xorm:"not null default 0.0000 comment('手续费') DECIMAL(11,4)"` | |||||
PaymentType int `json:"payment_type" xorm:"not null default 1 comment('1支付宝,2微信.3手动转账,4列表红包奖励,5收款码') TINYINT(1)"` | |||||
OrdType string `json:"ord_type" xorm:"not null default '' comment('订单类型 o2o_goods(小店), o2o_hotel(酒店) withdraw(提现) red_packet_reward(列表红包奖励) collection_code(收款码)') VARCHAR(255)"` | |||||
OrdId string `json:"ord_id" xorm:"not null default '' comment('对应订单编号') VARCHAR(50)"` | |||||
OrdTitle string `json:"ord_title" xorm:"not null default '' comment('订单标题') VARCHAR(50)"` | |||||
OrdAction int `json:"ord_action" xorm:"not null default 0 comment('10自购,11推广,12团队,13免单,20提现,21消费,22退款,23拼团返佣,24区域代理,25重置虚拟币 26充值 27裂变红包奖励') TINYINT(2)"` | |||||
OrdTime int `json:"ord_time" xorm:"not null default 0 comment('下单时间or提现时间') INT(11)"` | |||||
OrdDetail string `json:"ord_detail" xorm:"not null default '' comment('记录商品ID或提现账号') VARCHAR(50)"` | |||||
ExpectedTime string `json:"expected_time" xorm:"not null default '0' comment('预期到账时间,字符串用于直接显示,结算后清除内容') VARCHAR(30)"` | |||||
State int `json:"state" xorm:"not null default 1 comment('1未到账,2已到账') TINYINT(1)"` | |||||
Memo string `json:"memo" xorm:"not null default '' comment('备注') VARCHAR(2000)"` | |||||
OtherId int64 `json:"other_id" xorm:"not null default 0 comment('其他关联订单,具体根据订单类型判断') index BIGINT(20)"` | |||||
AliOrdId string `json:"ali_ord_id" xorm:"default '' comment('支付宝订单号') VARCHAR(128)"` | |||||
CreateAt time.Time `json:"create_at" xorm:"created not null default 'CURRENT_TIMESTAMP' comment('创建时间') TIMESTAMP"` | |||||
UpdateAt time.Time `json:"update_at" xorm:"updated not null default 'CURRENT_TIMESTAMP' comment('更新时间') TIMESTAMP"` | |||||
} |
@@ -4,6 +4,8 @@ import ( | |||||
"code.fnuoos.com/go_rely_warehouse/zyos_go_o2o_business.git/db" | "code.fnuoos.com/go_rely_warehouse/zyos_go_o2o_business.git/db" | ||||
"code.fnuoos.com/go_rely_warehouse/zyos_go_o2o_business.git/db/model" | "code.fnuoos.com/go_rely_warehouse/zyos_go_o2o_business.git/db/model" | ||||
zhios_o2o_business_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_o2o_business.git/utils" | zhios_o2o_business_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_o2o_business.git/utils" | ||||
zhios_o2o_business_logx "code.fnuoos.com/go_rely_warehouse/zyos_go_o2o_business.git/utils/logx" | |||||
"strconv" | |||||
"time" | "time" | ||||
"xorm.io/xorm" | "xorm.io/xorm" | ||||
) | ) | ||||
@@ -25,7 +27,7 @@ func AddStoreCommission(eg *xorm.Engine, args map[string]string) { | |||||
return | return | ||||
} | } | ||||
//判断是不是商家 | //判断是不是商家 | ||||
manager := GetO2oStore(eg, zhios_o2o_business_utils.IntToStr(user.ParentUid)) | |||||
_, manager := GetO2oStore(eg, zhios_o2o_business_utils.IntToStr(user.ParentUid)) | |||||
if manager == nil { | if manager == nil { | ||||
return | return | ||||
} | } | ||||
@@ -35,6 +37,9 @@ func AddStoreCommission(eg *xorm.Engine, args map[string]string) { | |||||
return | return | ||||
} | } | ||||
amount := zhios_o2o_business_utils.StrToFloat64(args["amount"]) * zhios_o2o_business_utils.StrToFloat64(args["bili"]) | amount := zhios_o2o_business_utils.StrToFloat64(args["amount"]) * zhios_o2o_business_utils.StrToFloat64(args["bili"]) | ||||
if amount == 0 { | |||||
return | |||||
} | |||||
var ord = model.StoreCommissionRelate{ | var ord = model.StoreCommissionRelate{ | ||||
Uid: user.ParentUid, | Uid: user.ParentUid, | ||||
FormUid: user.Uid, | FormUid: user.Uid, | ||||
@@ -47,3 +52,64 @@ func AddStoreCommission(eg *xorm.Engine, args map[string]string) { | |||||
eg.InsertOne(&ord) | eg.InsertOne(&ord) | ||||
return | return | ||||
} | } | ||||
//结算商家分佣 商家抽成部分 | |||||
/*** | |||||
oid 订单号 | |||||
pvd 渠道 | |||||
title 描述 | |||||
*/ | |||||
func SettleStoreCommission(eg *xorm.Engine, session *xorm.Session, args map[string]string) bool { | |||||
relate, err := db.GetStoreCommissionRelateWithSession(session, args["oid"], args["pvd"]) | |||||
if err != nil { | |||||
return false | |||||
} | |||||
if relate == nil { | |||||
return true | |||||
} | |||||
if relate.SettleTime.IsZero() == false { | |||||
return true | |||||
} | |||||
//判断是不是商家 | |||||
merchant, manager := GetO2oStore(eg, zhios_o2o_business_utils.IntToStr(relate.Uid)) | |||||
if manager == nil { | |||||
return true | |||||
} | |||||
if manager.Id > 0 { | |||||
amount := zhios_o2o_business_utils.StrToFloat64(relate.Amount) | |||||
mBeforeAmount := merchant.Amount | |||||
mAfterAmount := mBeforeAmount + amount | |||||
// o2o_fin_user_flow 新增流水记录 | |||||
var o2oFinUserFlow = model.O2oFinUserFlow{ | |||||
Uid: relate.Uid, | |||||
MerchantId: relate.Uid, | |||||
StoreId: manager.Id, | |||||
Type: 0, | |||||
Amount: strconv.FormatFloat(amount, 'f', 4, 64), | |||||
BeforeAmount: strconv.FormatFloat(mBeforeAmount, 'f', 4, 64), | |||||
AfterAmount: strconv.FormatFloat(mAfterAmount, 'f', 4, 64), | |||||
OrdType: relate.Pvd, | |||||
OrdId: relate.Oid, | |||||
OrdTitle: args["title"], | |||||
OrdAction: 11, | |||||
OrdTime: int(time.Now().Unix()), | |||||
State: 2, | |||||
CreateAt: time.Now(), | |||||
UpdateAt: time.Now(), | |||||
} | |||||
merchant.Amount = mAfterAmount | |||||
affected, err := db.MerchantUpdateWithSession(session, merchant, "amount") | |||||
has, errs := session.Insert(&o2oFinUserFlow) | |||||
if affected == 0 || err != nil || errs != nil || has == 0 { | |||||
_ = zhios_o2o_business_logx.Warn(err) | |||||
return false | |||||
} | |||||
relate.SettleTime = time.Now() | |||||
update, err := session.Where("id=?", relate.Id).Cols("settle_time").Update(relate) | |||||
if update == 0 || err != nil { | |||||
_ = zhios_o2o_business_logx.Warn(err) | |||||
return false | |||||
} | |||||
} | |||||
return true | |||||
} |
@@ -11,22 +11,22 @@ import ( | |||||
//通过上级查询是否商家,绑定关系 | //通过上级查询是否商家,绑定关系 | ||||
func GetParentUidToBindFans(eg *xorm.Engine, uid, parentUid string) { | func GetParentUidToBindFans(eg *xorm.Engine, uid, parentUid string) { | ||||
manager := GetO2oStore(eg, parentUid) | |||||
_, manager := GetO2oStore(eg, parentUid) | |||||
if manager == nil { | if manager == nil { | ||||
return | return | ||||
} | } | ||||
DealCommonPayStoreFans(eg, uid, zhios_o2o_business_utils.IntToStr(manager.Id), "0", "拉新", "1") | DealCommonPayStoreFans(eg, uid, zhios_o2o_business_utils.IntToStr(manager.Id), "0", "拉新", "1") | ||||
} | } | ||||
func GetO2oStore(eg *xorm.Engine, parentUid string) *model.O2oStore { | |||||
func GetO2oStore(eg *xorm.Engine, parentUid string) (*model.O2oMerchant, *model.O2oStore) { | |||||
merchantList, err := db.MerchantFindByUId(eg, parentUid) | merchantList, err := db.MerchantFindByUId(eg, parentUid) | ||||
if err != nil || merchantList == nil { | if err != nil || merchantList == nil { | ||||
return nil | |||||
return nil, nil | |||||
} | } | ||||
manager, err := db.MerchantFindByStoreManager(eg, zhios_o2o_business_utils.IntToStr(merchantList.Id)) | manager, err := db.MerchantFindByStoreManager(eg, zhios_o2o_business_utils.IntToStr(merchantList.Id)) | ||||
if err != nil || manager == nil { | if err != nil || manager == nil { | ||||
return nil | |||||
return nil, nil | |||||
} | } | ||||
return manager | |||||
return merchantList, manager | |||||
} | } | ||||
//DealCommonPayStoreFans 處理通用支付中的店鋪粉絲 | //DealCommonPayStoreFans 處理通用支付中的店鋪粉絲 | ||||