@@ -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 . AvgP rice* messageGroupsResult [ 0 ] . DividePercentage / 100 ) ; err != nil {
if err = financial . AddIncomeUpdateAccount ( db , userBillGroupMaster , model . BillTypeDivide , p rice* messageGroupsResult [ 0 ] . DividePercentage / 100 , job . ID ); err != nil {
dao . Rollback ( db )
return err
}
}
//接收人账户收入
if err = financial . AddIncomeUpdateAccount ( db , userBillJobOrder , model . BillTypeJobDivide , job . AvgP rice* ( 100 - messageGroupsResult [ 0 ] . DividePercentage ) / 100 ) ; err != nil {
if err = financial . AddIncomeUpdateAccount ( db , userBillJobOrder , model . BillTypeJobDivide , p rice* ( 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 , j ob. UserID , "" )
if err = financial . AddIncomeUpdateAccount ( db , userBill , model . BillTypeJobAuditUnPassWithCancelOverdue , job . AvgPrice ) ; err != nil {
dao . Rollback ( db )
return err
if job . CashbackType = = model . J obCashbackPrice {
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