bilifanxian

This commit is contained in:
苏尹岚
2020-12-10 14:02:46 +08:00
parent caf63a3869
commit d69c31b773
7 changed files with 100 additions and 48 deletions

View File

@@ -34,6 +34,8 @@ const (
CancelMaxCount = 5
waybillKgPrice = 200
mtwmMemberPrice = 1100
)
var (
@@ -70,8 +72,8 @@ func PublishJob(ctx *jxcontext.Context, jobExt *model.JobExt) (errCode string, e
// 需根据返现类型做一些参数判断
switch job.CashbackType {
case model.JobCashbackPercentage:
if job.Percentage <= 0 || job.Percentage > 10 {
return errCode, fmt.Errorf("返现比例请输入1-10之间的比例")
if job.Percentage <= 0 || job.Percentage > 100 {
return errCode, fmt.Errorf("返现比例请输入1-100之间的比例!")
}
case model.JobCashbackPrice:
default:
@@ -152,7 +154,7 @@ func PublishJob(ctx *jxcontext.Context, jobExt *model.JobExt) (errCode string, e
}
//发布任务要扣除任务总额的保证金,不够扣就要进行充值
if err == nil && job.Status != model.JobStatusFailed {
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeDeposit, job.TotalPrice); err != nil {
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeDeposit, job.TotalPrice, job.ID); err != nil {
dao.Rollback(db)
return
}
@@ -183,13 +185,27 @@ func CancelPublishJob(ctx *jxcontext.Context, jobID int) (err error) {
panic(r)
}
}()
if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeJobCancelOverdue, job.SurplusCount*job.AvgPrice); err != nil {
//如果是固定返现,退给任务发起人剩余数量*单价
//如果是比例返现,推给任务发起人任务总价-接取这个任务的用户实际返现的价格之和
var price int
if job.CashbackType == model.JobCashbackPrice {
price = job.SurplusCount * job.AvgPrice
} else {
if billIncomes, err := dao.GetBillIncome(db, jobID); err == nil {
for _, v := range billIncomes {
price += v.IncomePrice
}
}
price = job.TotalPrice - price
}
if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeJobCancelOverdue, price, jobID); err != nil {
dao.Rollback(db)
return
}
//3、任务状态被取消
job.Status = model.JobStatusFailed
if _, err = dao.UpdateEntity(db, job, "Status"); err != nil {
job.DeletedAt = time.Now()
if _, err = dao.UpdateEntity(db, job, "Status", "DeletedAt"); err != nil {
dao.Rollback(db)
return
}
@@ -349,9 +365,12 @@ func CancelAcceptJob(ctx *jxcontext.Context, jobID int, jobOrderID int64) (err e
}
//如果状态不正常(取消或者过期)就要把这一笔退回去
//2、账户收入
if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeJobCancelOverdue, job.AvgPrice); err != nil {
dao.Rollback(db)
return err
//是固定返现才会退一笔任务单价
if job.CashbackType == model.JobCashbackPrice {
if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeJobCancelOverdue, job.AvgPrice, jobID); err != nil {
dao.Rollback(db)
return err
}
}
}
//3、任务订单状态被取消
@@ -441,6 +460,12 @@ func SubmitJob(ctx *jxcontext.Context, jobOrder *model.JobOrder) (err error) {
jobOrder2 := &model.JobOrder{}
jobOrder2.JobOrderID = jobOrder.JobOrderID
err = dao.GetEntity(db, jobOrder2, "JobOrderID")
//如果是比例返现
if job.CashbackType == model.JobCashbackPercentage {
if jobOrder.UserActualPrice == 0 {
return fmt.Errorf("比例返现任务请输入订单实际实付金额,用于任务发起人审核!")
}
}
if jobOrder2.JobID == 0 {
return fmt.Errorf("未查询到相应的任务!")
}
@@ -487,8 +512,9 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment string) (e
if ctx.GetUserID() != job.UserID {
return fmt.Errorf("任务发起人才能审核!")
}
//审核时,若此任务已过期或者已取消,不通过则应将此任务保证金退还给发起人,通过则应将单次任务保证金给接受人
//若此任务过期,不通过则此任务剩余数量将+1,通过则应将单次任务保证金给接受人
//固定返现
//1、审核时若此任务过期或者已取消,不通过则应将此任务保证金退还给发起人,通过则应将单次任务保证金给接受人
//2、若此任务未过期不通过则此任务剩余数量将+1通过则应将单次任务保证金给接受人
jobOrder.Status = status
jobOrder.Comment = comment
jobOrder.AuditAt = time.Now()
@@ -506,6 +532,15 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment string) (e
return
}
if status == model.JobOrderStatusAuditPass {
var price int
if job.CashbackType == model.JobCashbackPrice {
price = job.AvgPrice
} else {
price = jobOrder.UserActualPrice * job.Percentage / 100
if price > job.AvgPrice {
price = job.AvgPrice
}
}
//若完成任务的人在某个群组中,则要向群主分成
if messageGroupMembers, err := dao.GetMessageGroupMembers(db, 0, model.GroupTypeMulit, jobOrder.UserID); err == nil {
if len(messageGroupMembers) > 1 {
@@ -516,19 +551,19 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment string) (e
//不分成
if messageGroupsResult[0].DividePercentage != 0 {
if userBillGroupMaster, err := dao.GetUserBill(db, messageGroupsResult[0].UserID, ""); err == nil {
if err = financial.AddIncomeUpdateAccount(db, userBillGroupMaster, model.BillTypeDivide, job.AvgPrice*messageGroupsResult[0].DividePercentage/100); err != nil {
if err = financial.AddIncomeUpdateAccount(db, userBillGroupMaster, model.BillTypeDivide, price*messageGroupsResult[0].DividePercentage/100, job.ID); err != nil {
dao.Rollback(db)
return err
}
}
//接收人账户收入
if err = financial.AddIncomeUpdateAccount(db, userBillJobOrder, model.BillTypeJobDivide, job.AvgPrice*(100-messageGroupsResult[0].DividePercentage)/100); err != nil {
if err = financial.AddIncomeUpdateAccount(db, userBillJobOrder, model.BillTypeJobDivide, price*(100-messageGroupsResult[0].DividePercentage)/100, job.ID); err != nil {
dao.Rollback(db)
return err
}
} else {
//接收人账户收入
if err = financial.AddIncomeUpdateAccount(db, userBillJobOrder, model.BillTypeJob, job.AvgPrice); err != nil {
if err = financial.AddIncomeUpdateAccount(db, userBillJobOrder, model.BillTypeJob, price, job.ID); err != nil {
dao.Rollback(db)
return err
}
@@ -537,7 +572,7 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment string) (e
}
} else if len(messageGroupMembers) == 0 { //若没有在某个群组,则得到全部
//接收人账户收入
if err = financial.AddIncomeUpdateAccount(db, userBillJobOrder, model.BillTypeJob, job.AvgPrice); err != nil {
if err = financial.AddIncomeUpdateAccount(db, userBillJobOrder, model.BillTypeJob, price, job.ID); err != nil {
dao.Rollback(db)
return err
}
@@ -550,10 +585,12 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment string) (e
}
} else {
if job.Status < 0 {
userBill, err := dao.GetUserBill(db, job.UserID, "")
if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeJobAuditUnPassWithCancelOverdue, job.AvgPrice); err != nil {
dao.Rollback(db)
return err
if job.CashbackType == model.JobCashbackPrice {
userBill, err := dao.GetUserBill(db, job.UserID, "")
if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeJobAuditUnPassWithCancelOverdue, job.AvgPrice, job.ID); err != nil {
dao.Rollback(db)
return err
}
}
} else {
job.SurplusCount += 1
@@ -593,11 +630,7 @@ func RefreshJobStatus(ctx *jxcontext.Context) (err error) {
}
for _, job := range jobs {
if time.Now().Sub(*job.FinishedAt) >= 0 {
job2 := &model.Job{}
job2.ID = job.ID
dao.GetEntity(db, job2)
job2.Status = model.JobStatusOverdue
dao.UpdateEntity(db, job2, "Status")
CancelPublishJob(ctx, job.ID)
}
}
globals.SugarLogger.Debugf("RefreshJobStatus end...")
@@ -654,11 +687,11 @@ func RechargeMtMembers(ctx *jxcontext.Context, phone int) (errCode string, err e
if err != nil {
return errCode, err
}
if userBill.AccountBalance < 1100 {
if userBill.AccountBalance < mtwmMemberPrice {
return model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足,请充值!")
}
//账户支出
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeSpJob, 1100); err != nil {
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeSpJob, mtwmMemberPrice, 1); err != nil {
dao.Rollback(db)
return errCode, err
}
@@ -779,7 +812,7 @@ func SendJdDelivery(ctx *jxcontext.Context, dOrder *model.DeliveryOrder) (errCod
}
}()
//账户支出明细
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeSpJob, dOrder.PayPrice); err != nil {
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeSpJob, dOrder.PayPrice, 2); err != nil {
dao.Rollback(db)
return
}
@@ -843,7 +876,7 @@ func CancelJdDelivery(ctx *jxcontext.Context, vendorWaybillID, reason string) (e
dao.Rollback(db)
return
}
if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeSpJob, dOrder.PayPrice); err != nil {
if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeSpJob, dOrder.PayPrice, 2); err != nil {
dao.Rollback(db)
return
}
@@ -925,7 +958,7 @@ func CheckJdDeliveryWeight(ctx *jxcontext.Context) (err error) {
if err != nil {
return retVal, err
}
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeJdWaybillOverWeight, utils.Float64TwoInt(diffPrice)); err != nil {
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeJdWaybillOverWeight, utils.Float64TwoInt(diffPrice), 2); err != nil {
return retVal, err
}
deliveryOrder.IsWeight = 2

View File

@@ -605,7 +605,7 @@ func InvestMember(ctx *jxcontext.Context, memberID int, userID string, isFree bo
}
if !isFree {
//支出明细
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeMember, memberCard.Price); err != nil {
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeMember, memberCard.Price, 0); err != nil {
dao.Rollback(db)
return
}

View File

@@ -420,12 +420,12 @@ func DeleteMessageGroup(ctx *jxcontext.Context, groupID int, userID string) (err
}
}()
//账户支出
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeQuitGroup, quitPrice); err != nil {
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeQuitGroup, quitPrice, 0); err != nil {
dao.Rollback(db)
return errCode, err
}
//群主收到退团金额
if err = financial.AddIncomeUpdateAccount(db, userBillGroupMaster, model.BillTypeQuitGroup, quitPrice); err != nil {
if err = financial.AddIncomeUpdateAccount(db, userBillGroupMaster, model.BillTypeQuitGroup, quitPrice, 0); err != nil {
dao.Rollback(db)
return errCode, err
}

View File

@@ -7,21 +7,23 @@ import (
"git.rosy.net.cn/jx-callback/business/model/dao"
)
func AddBillIncome(db *dao.DaoDB, billID int64, billType, incomePrice int) (err error) {
func AddBillIncome(db *dao.DaoDB, billID int64, billType, incomePrice, jobID int) (err error) {
billIncome := &model.BillIncome{
BillID: billID,
Type: billType,
IncomePrice: incomePrice,
JobID: jobID,
}
dao.WrapAddIDCULEntity(billIncome, jxcontext.AdminCtx.GetUserName())
return dao.CreateEntity(db, billIncome)
}
func AddBillExpend(db *dao.DaoDB, billID int64, billType, expendPrice int) (err error) {
func AddBillExpend(db *dao.DaoDB, billID int64, billType, expendPrice, jobID int) (err error) {
billExpend := &model.BillExpend{
BillID: billID,
Type: billType,
ExpendPrice: expendPrice,
JobID: jobID,
}
dao.WrapAddIDCULEntity(billExpend, jxcontext.AdminCtx.GetUserName())
return dao.CreateEntity(db, billExpend)
@@ -39,9 +41,9 @@ func GetUserBillDetail(ctx *jxcontext.Context, userID, fromTime, toTime string,
return dao.GetUserBillDetail(dao.GetDB(), userID, utils.Str2Time(fromTime), utils.Str2Time(toTime), pageSize, offset)
}
func AddExpendUpdateAccount(db *dao.DaoDB, userBill *model.UserBill, billType, price int) (err error) {
func AddExpendUpdateAccount(db *dao.DaoDB, userBill *model.UserBill, billType, price, jobID int) (err error) {
//1、账户支出增加一条记录
err = AddBillExpend(db, userBill.BillID, billType, price)
err = AddBillExpend(db, userBill.BillID, billType, price, jobID)
if err != nil {
return err
}
@@ -51,9 +53,9 @@ func AddExpendUpdateAccount(db *dao.DaoDB, userBill *model.UserBill, billType, p
return err
}
func AddIncomeUpdateAccount(db *dao.DaoDB, userBill *model.UserBill, billType, price int) (err error) {
func AddIncomeUpdateAccount(db *dao.DaoDB, userBill *model.UserBill, billType, price, jobID int) (err error) {
//2、账户收入增加一条记录
err = AddBillIncome(db, userBill.BillID, billType, price)
err = AddBillIncome(db, userBill.BillID, billType, price, jobID)
if err != nil {
return err
}

View File

@@ -58,7 +58,7 @@ func OnPayFinished(order *model.Order) (err error) {
case model.OrderTypePay:
//如果是账户充值(发布任务等)
//账户收入
if err = AddIncomeUpdateAccount(db, userBill, model.BillTypeInvest, order.PayPrice); err != nil {
if err = AddIncomeUpdateAccount(db, userBill, model.BillTypeInvest, order.PayPrice, 0); err != nil {
dao.Rollback(db)
}
default:
@@ -93,7 +93,7 @@ func OnCashFinished(order *model.Order) (err error) {
case model.OrderTypeCash:
//如果是账户提现
//账户支出
if err = AddExpendUpdateAccount(db, userBill, model.BillTypeCash, order.PayPrice); err != nil {
if err = AddExpendUpdateAccount(db, userBill, model.BillTypeCash, order.PayPrice, 0); err != nil {
dao.Rollback(db)
}
default:

View File

@@ -53,6 +53,22 @@ func GetBillExpend(db *DaoDB, userID string, billType int, fromTime, toTime time
return billExpends, err
}
func GetBillIncome(db *DaoDB, jobID int) (billIncomes []*model.BillIncome, err error) {
sql := `
SELECT b.*
FROM user_bill a
LEFT JOIN bill_income b ON b.bill_id = a.bill_id
WHERE a.deleted_at = ?
`
sqlParams := []interface{}{utils.DefaultTimeValue}
if jobID != 0 {
sql += ` AND b.job_id = ?`
sqlParams = append(sqlParams, jobID)
}
err = GetRows(db, &billIncomes, sql, sqlParams)
return billIncomes, err
}
type UserBillDetail struct {
CreatedAt time.Time `json:"created_at"`
LastOperator string `json:"lastOperator"`

View File

@@ -138,15 +138,16 @@ func (v *JobStep) TableIndex() [][]string {
type JobOrder struct {
ModelIDCUL
JobID int `orm:"column(job_id)" json:"jobID"` //任务ID
JobOrderID int64 `orm:"column(job_order_id)" json:"jobOrderID"` //任务订单号
UserID string `orm:"column(user_id)" json:"userID"` //接任务人ID
Status int `json:"status"` //任务订单状态,接单,待审核,已审核,已结算等
SubmitAuditAt time.Time `json:"submitAuditTime"` //提交审核日期
AuditAt time.Time `json:"auditAt"` //审核日期
Content string `josn:"content"` //任务审核内容
Imgs string `json:"imgs"` //任务审核图片
Comment string `json:"comment"` //审核理由
JobID int `orm:"column(job_id)" json:"jobID"` //任务ID
JobOrderID int64 `orm:"column(job_order_id)" json:"jobOrderID"` //任务订单号
UserID string `orm:"column(user_id)" json:"userID"` //接任务人ID
Status int `json:"status"` //任务订单状态,接单,待审核,已审核,已结算等
SubmitAuditAt time.Time `json:"submitAuditTime"` //提交审核日期
AuditAt time.Time `json:"auditAt"` //审核日期
Content string `josn:"content"` //任务审核内容
Imgs string `json:"imgs"` //任务审核图片
Comment string `json:"comment"` //审核理由
UserActualPrice int `json:"userActualPrice"` //用户订单实际支付(用户自填)
}
func (v *JobOrder) TableIndex() [][]string {