diff --git a/db/db_extend_commission.go b/db/db_extend_commission.go index bcc3646..4bee9e3 100644 --- a/db/db_extend_commission.go +++ b/db/db_extend_commission.go @@ -7,15 +7,15 @@ import ( func GetExtendAgentCommissionRelate(eg *xorm.Engine, oid, pvd string) (*model.ExtendAgentCommissionRelate, error) { var ord model.ExtendAgentCommissionRelate - has, err := eg.Where("oid=? and pvd=?", oid, pvd).Get(&ord) + has, err := eg.Where("oid=? and pvd=? ", oid, pvd).Get(&ord) if has == false || err != nil { return nil, err } return &ord, nil } -func GetExtendAgentCommissionRelateWithSession(session *xorm.Session, oid, pvd string) (*model.ExtendAgentCommissionRelate, error) { +func GetExtendAgentCommissionRelateWithSession(session *xorm.Session, oid, pvd, coinId string) (*model.ExtendAgentCommissionRelate, error) { var ord model.ExtendAgentCommissionRelate - has, err := session.Where("oid=? and pvd=?", oid, pvd).Get(&ord) + has, err := session.Where("oid=? and pvd=? and coin_id=?", oid, pvd, coinId).Get(&ord) if has == false || err != nil { return nil, err } diff --git a/db/db_user.go b/db/db_user.go index 5a8385f..cf673cf 100644 --- a/db/db_user.go +++ b/db/db_user.go @@ -23,3 +23,11 @@ func UserProfileFindByID(Db *xorm.Engine, id interface{}) (*model.UserProfile, e } return &m, nil } +func UserProfileFindByIDWithSession(sess *xorm.Session, id interface{}) (*model.UserProfile, error) { + var m model.UserProfile + if has, err := sess.Where("uid = ?", id). + Get(&m); err != nil || has == false { + return nil, zhios_order_relate_logx.Warn(err) + } + return &m, nil +} diff --git a/db/model/fin_user_flow.go b/db/model/fin_user_flow.go new file mode 100644 index 0000000..da8a443 --- /dev/null +++ b/db/model/fin_user_flow.go @@ -0,0 +1,29 @@ +package model + +import ( + "time" +) + +type FinUserFlow struct { + Id int64 `json:"id" xorm:"pk autoincr comment('流水编号') BIGINT(20)"` + Uid int `json:"uid" xorm:"not null 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手动转账') TINYINT(1)"` + OrdType string `json:"ord_type" xorm:"not null default '' comment('订单类型taobao,jd,pdd,vip,suning,kaola,own自营,withdraw提现') VARCHAR(20)"` + 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团队,20提现,21消费') 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('其他关联订单,具体根据订单类型判断') 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"` +} diff --git a/db/model/mark_settle_record.go b/db/model/mark_settle_record.go new file mode 100644 index 0000000..2376dc8 --- /dev/null +++ b/db/model/mark_settle_record.go @@ -0,0 +1,18 @@ +package model + +import ( + "time" +) + +type MarkSettleRecord struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uid int `json:"uid" xorm:"default 0 INT(11)"` + Amount string `json:"amount" xorm:"default 0.0000 DECIMAL(11,4)"` + Time time.Time `json:"time" xorm:"DATETIME"` + Type string `json:"type" xorm:"default '' VARCHAR(255)"` + Extra string `json:"extra" xorm:" TEXT"` + CoinId int `json:"coin_id" xorm:"default 0 INT(11)"` + BelongTime string `json:"belong_time" xorm:"default '' comment('所属月份') VARCHAR(255)"` + Oid string `json:"oid" xorm:"default '' comment('') VARCHAR(255)"` + Pvd string `json:"pvd" xorm:"default '' comment('') VARCHAR(255)"` +} diff --git a/svc/extend_agent_commission.go b/svc/extend_agent_commission.go index a34d9d6..7ba9756 100644 --- a/svc/extend_agent_commission.go +++ b/svc/extend_agent_commission.go @@ -5,6 +5,7 @@ import ( "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db/model" "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/md" zhios_order_relate_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/utils" + zhios_order_relate_logx "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/utils/logx" "encoding/json" "time" "xorm.io/xorm" @@ -106,3 +107,74 @@ func AddExtendAgentCommission(eg *xorm.Engine, args map[string]string) { return } + +//结算分佣抽成部分 +/*** +oid 订单号 +pvd 渠道 +title 描述 +*/ +func SettleExtendUidCommission(session *xorm.Session, args map[string]string) bool { + relate, err := db.GetExtendAgentCommissionRelateWithSession(session, args["oid"], args["pvd"], "0") + if err != nil { + return false + } + if relate == nil { + return true + } + if relate.SettleTime.IsZero() == false { + return true + } + user, _ := db.UserProfileFindByIDWithSession(session, relate.Uid) + amount := zhios_order_relate_utils.StrToFloat64(relate.Amount) + mBeforeAmount := zhios_order_relate_utils.StrToFloat64(user.FinValid) + mAfterAmount := mBeforeAmount + amount + // + now := time.Now() + var finUserFlow = model.FinUserFlow{ + Type: 0, + Uid: relate.Uid, + Amount: zhios_order_relate_utils.AnyToString(amount), + BeforeAmount: zhios_order_relate_utils.AnyToString(mBeforeAmount), + AfterAmount: zhios_order_relate_utils.AnyToString(mAfterAmount), + OrdType: "own", + OrdId: zhios_order_relate_utils.AnyToString(relate.Oid), + OrdAction: 14, + OrdDetail: zhios_order_relate_utils.AnyToString(relate.Oid), + State: 2, + OrdTitle: "推荐代理购买商品", + OrdTime: int(now.Unix()), + CreateAt: now, + UpdateAt: now, + } + user.FinValid = zhios_order_relate_utils.Float64ToStrByPrec(mAfterAmount, 4) + affected, err := session.Where("uid=?", user.Uid).Cols("fin_valid").Update(user) + has, errs := session.Insert(&finUserFlow) + if affected == 0 || err != nil || errs != nil || has == 0 { + _ = zhios_order_relate_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_order_relate_logx.Warn(err) + return false + } + t := time.Now() + // + _, err = session.Insert(&model.MarkSettleRecord{ + Uid: relate.Uid, + Amount: zhios_order_relate_utils.Float64ToStrByPrec(amount, 4), + Time: t, + Type: "extend_agent_commission", + CoinId: 0, + BelongTime: t.Format("2006-01"), + Pvd: args["pvd"], + Oid: args["oid"], + }) + if err != nil { + _ = zhios_order_relate_logx.Warn(err) + return false + } + return true +}