This commit is contained in:
苏尹岚
2021-04-20 13:51:57 +08:00
parent 1cd87fb87c
commit c43039abca
3 changed files with 75 additions and 45 deletions

View File

@@ -192,7 +192,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, job.ID); err != nil {
if err = financial.AddExpendUpdateAccount(txDB, userBill, model.BillTypeDeposit, job.TotalPrice, job.ID); err != nil {
dao.Rollback(db, txDB)
return
}
@@ -243,14 +243,14 @@ func CancelPublishJob(ctx *jxcontext.Context, jobID int) (err error) {
}
price = job.TotalPrice - price
}
if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeJobCancelOverdue, price, jobID); err != nil {
if err = financial.AddIncomeUpdateAccount(txDB, userBill, model.BillTypeJobCancelOverdue, price, jobID); err != nil {
dao.Rollback(db, txDB)
return
}
//3、任务状态被取消
job.Status = model.JobStatusFailed
// job.DeletedAt = time.Now()
if _, err = dao.UpdateEntity(db, job, "Status"); err != nil {
if _, err = dao.UpdateEntityTx(txDB, job, "Status"); err != nil {
dao.Rollback(db, txDB)
return
}
@@ -409,13 +409,13 @@ func AcceptJob(ctx *jxcontext.Context, jobID, dropShippingDeliveryID, dropShippi
}
}()
dao.WrapAddIDCULEntity(jobOrder, ctx.GetUserName())
if err = dao.CreateEntity(db, jobOrder); err != nil {
if err = dao.CreateEntityTx(txDB, jobOrder); err != nil {
dao.Rollback(db, txDB)
return
}
//用户接受任务,任务剩余次数-1
job.SurplusCount -= 1
if _, err = dao.UpdateEntity(db, job, "SurplusCount"); err != nil {
if _, err = dao.UpdateEntityTx(txDB, job, "SurplusCount"); err != nil {
dao.Rollback(db, txDB)
return
}
@@ -429,7 +429,7 @@ func AcceptJob(ctx *jxcontext.Context, jobID, dropShippingDeliveryID, dropShippi
panic(r)
}
}()
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeDropShipping, jobOrder.UserActualPrice, job.ID); err != nil {
if err = financial.AddExpendUpdateAccount(txDB, userBill, model.BillTypeDropShipping, jobOrder.UserActualPrice, job.ID); err != nil {
dao.Rollback(db, txDB)
return
}
@@ -481,7 +481,7 @@ func CancelAcceptJob(ctx *jxcontext.Context, jobID int, jobOrderID int64) (err e
//如果当前任务状态正常剩余数量就加1
if job.Status >= 0 {
job.SurplusCount += 1
if _, err = dao.UpdateEntity(db, job, "SurplusCount"); err != nil {
if _, err = dao.UpdateEntityTx(txDB, job, "SurplusCount"); err != nil {
dao.Rollback(db, txDB)
return
}
@@ -494,7 +494,7 @@ func CancelAcceptJob(ctx *jxcontext.Context, jobID int, jobOrderID int64) (err e
//2、账户收入
//是固定返现才会退一笔任务单价
if job.CashbackType == model.JobCashbackPrice {
if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeJobCancelOverdue, job.AvgPrice, jobID); err != nil {
if err = financial.AddIncomeUpdateAccount(txDB, userBill, model.BillTypeJobCancelOverdue, job.AvgPrice, jobID); err != nil {
dao.Rollback(db, txDB)
return err
}
@@ -506,14 +506,14 @@ func CancelAcceptJob(ctx *jxcontext.Context, jobID int, jobOrderID int64) (err e
if userBill == nil {
return fmt.Errorf("未查询到该用户的账单!")
}
if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeJobCancelOverdue, jobOrder.UserActualPrice, jobID); err != nil {
if err = financial.AddIncomeUpdateAccount(txDB, userBill, model.BillTypeJobCancelOverdue, jobOrder.UserActualPrice, jobID); err != nil {
dao.Rollback(db, txDB)
return err
}
}
//3、任务订单状态被取消
jobOrder.Status = model.JobOrderStatusCancel
if _, err = dao.UpdateEntity(db, jobOrder, "Status"); err != nil {
if _, err = dao.UpdateEntityTx(txDB, jobOrder, "Status"); err != nil {
dao.Rollback(db, txDB)
return err
}
@@ -617,7 +617,7 @@ func UpdateDropShippingJobOrders(db *dao.DaoDB, timer *time.Timer, jobID int, jo
panic(r)
}
}()
if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeDropShippingDeposit, job.AvgPrice, job.ID); err != nil {
if err = financial.AddIncomeUpdateAccount(txDB, userBill, model.BillTypeDropShippingDeposit, job.AvgPrice, job.ID); err != nil {
dao.Rollback(db, txDB)
return
}
@@ -746,7 +746,7 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment, vendorWay
panic(r)
}
}()
if _, err = dao.UpdateEntity(db, jobOrder, "Status", "Comment", "AuditAt", "LastOperator"); err != nil {
if _, err = dao.UpdateEntityTx(txDB, jobOrder, "Status", "Comment", "AuditAt", "LastOperator"); err != nil {
dao.Rollback(db, txDB)
return
}
@@ -771,19 +771,19 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment, vendorWay
if len(messageGroupsResult) == 1 {
if messageGroupsResult[0].DividePercentage != 0 {
if userBillGroupMaster, err := dao.GetUserBill(db, messageGroupsResult[0].UserID, ""); err == nil {
if err = financial.AddIncomeUpdateAccount(db, userBillGroupMaster, model.BillTypeDivide, price*messageGroupsResult[0].DividePercentage/100, job.ID); err != nil {
if err = financial.AddIncomeUpdateAccount(txDB, userBillGroupMaster, model.BillTypeDivide, price*messageGroupsResult[0].DividePercentage/100, job.ID); err != nil {
dao.Rollback(db, txDB)
return err
}
}
//接收人账户收入
if err = financial.AddIncomeUpdateAccount(db, userBillJobOrder, model.BillTypeJobDivide, price*(100-messageGroupsResult[0].DividePercentage)/100, job.ID); err != nil {
if err = financial.AddIncomeUpdateAccount(txDB, userBillJobOrder, model.BillTypeJobDivide, price*(100-messageGroupsResult[0].DividePercentage)/100, job.ID); err != nil {
dao.Rollback(db, txDB)
return err
}
} else {
//接收人账户收入
if err = financial.AddIncomeUpdateAccount(db, userBillJobOrder, model.BillTypeJob, price, job.ID); err != nil {
if err = financial.AddIncomeUpdateAccount(txDB, userBillJobOrder, model.BillTypeJob, price, job.ID); err != nil {
dao.Rollback(db, txDB)
return err
}
@@ -792,14 +792,14 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment, vendorWay
}
} else if len(messageGroupMembers) == 0 { //若没有在某个群组,则得到全部
//接收人账户收入
if err = financial.AddIncomeUpdateAccount(db, userBillJobOrder, model.BillTypeJob, price, job.ID); err != nil {
if err = financial.AddIncomeUpdateAccount(txDB, userBillJobOrder, model.BillTypeJob, price, job.ID); err != nil {
dao.Rollback(db, txDB)
return err
}
}
}
jobOrder.Status = model.JobOrderStatusFinish
if _, err = dao.UpdateEntity(db, jobOrder, "Status"); err != nil {
if _, err = dao.UpdateEntityTx(txDB, jobOrder, "Status"); err != nil {
dao.Rollback(db, txDB)
return err
}
@@ -809,12 +809,12 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment, vendorWay
//一件代发处理,审核相当于发货
jobOrder.VendorWaybillID = vendorWaybillID
jobOrder.Status = model.JobOrderStatusFinish
if _, err = dao.UpdateEntity(db, jobOrder, "Status", "VendorWaybillID"); err != nil {
if _, err = dao.UpdateEntityTx(txDB, jobOrder, "Status", "VendorWaybillID"); err != nil {
dao.Rollback(db, txDB)
return err
}
userBill, err := dao.GetUserBill(db, job.UserID, "")
if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeDropShippingDeposit, job.AvgPrice, job.ID); err != nil {
if err = financial.AddIncomeUpdateAccount(txDB, userBill, model.BillTypeDropShippingDeposit, job.AvgPrice, job.ID); err != nil {
dao.Rollback(db, txDB)
return err
}
@@ -828,7 +828,7 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment, vendorWay
if job.Status < 0 {
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 {
if err = financial.AddIncomeUpdateAccount(txDB, userBill, model.BillTypeJobAuditUnPassWithCancelOverdue, job.AvgPrice, job.ID); err != nil {
dao.Rollback(db, txDB)
return err
}
@@ -836,7 +836,7 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment, vendorWay
} else {
//审核不通过的话,要重新变成待上传,再重新开个定时器
jobOrder.Status = model.JobOrderStatusAccept
if _, err = dao.UpdateEntity(db, jobOrder, "Status"); err != nil {
if _, err = dao.UpdateEntityTx(txDB, jobOrder, "Status"); err != nil {
dao.Rollback(db, txDB)
return
}
@@ -845,7 +845,7 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment, vendorWay
JobID: job.ID,
JobOrderID: jobOrder.JobOrderID,
}
if _, err = dao.DeleteEntity(db, jobTimer, "JobID", "JobOrderID"); err != nil {
if _, err = dao.DeleteEntityTx(txDB, jobTimer, "JobID", "JobOrderID"); err != nil {
dao.Rollback(db, txDB)
return
}
@@ -919,7 +919,7 @@ func RefreshJobStatus(ctx *jxcontext.Context) (err error) {
}
price = job.TotalPrice - price
}
if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeJobCancelOverdue, price, job.ID); err != nil {
if err = financial.AddIncomeUpdateAccount(txDB, userBill, model.BillTypeJobCancelOverdue, price, job.ID); err != nil {
dao.Rollback(db, txDB)
return err
}
@@ -930,7 +930,7 @@ func RefreshJobStatus(ctx *jxcontext.Context) (err error) {
if job2 != nil {
job2.Status = model.JobStatusOverdue
// job.DeletedAt = time.Now()
if _, err = dao.UpdateEntity(db, job2, "Status"); err != nil {
if _, err = dao.UpdateEntityTx(txDB, job2, "Status"); err != nil {
dao.Rollback(db, txDB)
return err
}
@@ -999,7 +999,7 @@ func RechargeMtMembers(ctx *jxcontext.Context, phone int) (errCode string, err e
return model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足,请充值!")
}
//账户支出
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeSpJob, mtwmMemberPrice, 1); err != nil {
if err = financial.AddExpendUpdateAccount(txDB, userBill, model.BillTypeSpJob, mtwmMemberPrice, 1); err != nil {
dao.Rollback(db, txDB)
return errCode, err
}
@@ -1128,7 +1128,7 @@ func SendJdDelivery(ctx *jxcontext.Context, dOrder *model.DeliveryOrder) (errCod
}
}()
//账户支出明细
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeSpJob, dOrder.PayPrice, 2); err != nil {
if err = financial.AddExpendUpdateAccount(txDB, userBill, model.BillTypeSpJob, dOrder.PayPrice, 2); err != nil {
dao.Rollback(db, txDB)
return
}
@@ -1206,7 +1206,7 @@ func CancelJdDelivery(ctx *jxcontext.Context, vendorWaybillID, reason string) (e
dao.Rollback(db, txDB)
return
}
if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeSpJob, dOrder.PayPrice, 2); err != nil {
if err = financial.AddIncomeUpdateAccount(txDB, userBill, model.BillTypeSpJob, dOrder.PayPrice, 2); err != nil {
dao.Rollback(db, txDB)
return
}
@@ -1268,12 +1268,19 @@ func RefreshJdDelivery(ctx *jxcontext.Context) (err error) {
}
dOrder := &model.DeliveryOrder{}
dOrder.VendorWaybillID = v.VendorWaybillID
txDB, _ := dao.Begin(db)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db, txDB)
panic(r)
}
}()
if err = dao.GetEntity(db, dOrder, "VendorWaybillID"); err == nil {
if isCancel {
//退钱给发快递的
dOrder.Status = model.OrderStatusCanceled
userBill, _ := dao.GetUserBill(db, v.UserID, "")
err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeSpJob, v.PayPrice+v.DiffPrice, 2)
err = financial.AddIncomeUpdateAccount(txDB, userBill, model.BillTypeSpJob, v.PayPrice+v.DiffPrice, 2)
} else if isFinished {
//快递任务要完成
dOrder.Status = model.OrderStatusFinished
@@ -1284,13 +1291,14 @@ func RefreshJdDelivery(ctx *jxcontext.Context) (err error) {
return retVal, err
}
if err == nil {
dao.UpdateEntity(db, dOrder, "Status")
dao.UpdateEntityTx(txDB, dOrder, "Status")
} else {
if strings.Contains(err.Error(), "审核状态不正确") {
dao.UpdateEntity(db, dOrder, "Status")
dao.UpdateEntityTx(txDB, dOrder, "Status")
}
}
}
dao.Commit(db, txDB)
}
return retVal, err
}, list)
@@ -1362,6 +1370,13 @@ func CheckJdDeliveryWeight(ctx *jxcontext.Context) (err error) {
if waybill.DeliveryID == "" {
return retVal, err
}
txDB, _ := dao.Begin(db)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db, txDB)
panic(r)
}
}()
if waybill.DeliveryID == deliveryOrder.VendorWaybillID {
deliveryOrder.IsWeight = 1 //合格
if waybill.Weight > 3 && math.Floor(deliveryOrder.Weight) < math.Floor(waybill.Weight) {
@@ -1369,7 +1384,8 @@ func CheckJdDeliveryWeight(ctx *jxcontext.Context) (err error) {
if err != nil {
return retVal, err
}
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeJdWaybillOverWeight, utils.Float64TwoInt(diffPrice), 2); err != nil {
if err = financial.AddExpendUpdateAccount(txDB, userBill, model.BillTypeJdWaybillOverWeight, utils.Float64TwoInt(diffPrice), 2); err != nil {
txDB.Rollback()
return retVal, err
}
deliveryOrder.IsWeight = 2 //超重
@@ -1377,7 +1393,8 @@ func CheckJdDeliveryWeight(ctx *jxcontext.Context) (err error) {
}
}
deliveryOrder.ActualWeight = waybill.Weight
dao.UpdateEntity(db, deliveryOrder, "IsWeight", "ActualWeight", "DiffPrice")
dao.UpdateEntityTx(txDB, deliveryOrder, "IsWeight", "ActualWeight", "DiffPrice")
dao.Commit(db, txDB)
return retVal, err
}, deliveryOrders)
tasksch.HandleTask(task, nil, true).Run()
@@ -1550,7 +1567,7 @@ func ConfirmDropShippingJob(ctx *jxcontext.Context, jobOrderID int) (err error)
return
}
userBill, err := dao.GetUserBill(db, job.UserID, "")
if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeDropShipping, jobOrder.UserActualPrice, job.ID); err != nil {
if err = financial.AddIncomeUpdateAccount(txDB, userBill, model.BillTypeDropShipping, jobOrder.UserActualPrice, job.ID); err != nil {
dao.Rollback(db, txDB)
return
}

View File

@@ -5,9 +5,10 @@ import (
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"github.com/astaxie/beego/client/orm"
)
func AddBillIncome(db *dao.DaoDB, billID int64, billType, incomePrice, jobID int) (err error) {
func AddBillIncome(txDB orm.TxOrmer, billID int64, billType, incomePrice, jobID int) (err error) {
billIncome := &model.BillIncome{
BillID: billID,
Type: billType,
@@ -15,10 +16,10 @@ func AddBillIncome(db *dao.DaoDB, billID int64, billType, incomePrice, jobID int
JobID: jobID,
}
dao.WrapAddIDCULEntity(billIncome, jxcontext.AdminCtx.GetUserName())
return dao.CreateEntity(db, billIncome)
return dao.CreateEntityTx(txDB, billIncome)
}
func AddBillExpend(db *dao.DaoDB, billID int64, billType, expendPrice, jobID int) (err error) {
func AddBillExpend(txDB orm.TxOrmer, billID int64, billType, expendPrice, jobID int) (err error) {
billExpend := &model.BillExpend{
BillID: billID,
Type: billType,
@@ -26,41 +27,41 @@ func AddBillExpend(db *dao.DaoDB, billID int64, billType, expendPrice, jobID int
JobID: jobID,
}
dao.WrapAddIDCULEntity(billExpend, jxcontext.AdminCtx.GetUserName())
return dao.CreateEntity(db, billExpend)
return dao.CreateEntityTx(txDB, billExpend)
}
func AddUserBill(db *dao.DaoDB, billID int64, userID string) (err error) {
func AddUserBill(txDB orm.TxOrmer, billID int64, userID string) (err error) {
userBillInsert := &model.UserBill{
BillID: billID,
UserID: userID,
}
dao.WrapAddIDCULDEntity(userBillInsert, jxcontext.AdminCtx.GetUserName())
return dao.CreateEntity(db, userBillInsert)
return dao.CreateEntityTx(txDB, userBillInsert)
}
func GetUserBillDetail(ctx *jxcontext.Context, userID, fromTime, toTime string, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) {
return dao.GetUserBillDetail(dao.GetDB(), userID, utils.Str2Time(fromTime), utils.Str2Time(toTime), pageSize, offset)
}
func AddExpendUpdateAccount(db *dao.DaoDB, userBill *model.UserBill, billType, price, jobID int) (err error) {
func AddExpendUpdateAccount(txDB orm.TxOrmer, userBill *model.UserBill, billType, price, jobID int) (err error) {
//1、账户支出增加一条记录
err = AddBillExpend(db, userBill.BillID, billType, price, jobID)
err = AddBillExpend(txDB, userBill.BillID, billType, price, jobID)
if err != nil {
return err
}
//2、账户表余额减少相应值
userBill.AccountBalance -= price
_, err = dao.UpdateEntity(db, userBill, "AccountBalance")
_, err = dao.UpdateEntityTx(txDB, userBill, "AccountBalance")
return err
}
func AddIncomeUpdateAccount(db *dao.DaoDB, userBill *model.UserBill, billType, price, jobID int) (err error) {
func AddIncomeUpdateAccount(txDB orm.TxOrmer, userBill *model.UserBill, billType, price, jobID int) (err error) {
//2、账户收入增加一条记录
err = AddBillIncome(db, userBill.BillID, billType, price, jobID)
err = AddBillIncome(txDB, userBill.BillID, billType, price, jobID)
if err != nil {
return err
}
//1、根据任务剩余数量退钱到账户余额中
userBill.AccountBalance += price
_, err = dao.UpdateEntity(db, userBill, "AccountBalance")
_, err = dao.UpdateEntityTx(txDB, userBill, "AccountBalance")
return err
}

View File

@@ -263,6 +263,18 @@ func DeleteEntity(db *DaoDB, item interface{}, cols ...string) (num int64, err e
return num, err
}
func DeleteEntityTx(txDB orm.TxOrmer, item interface{}, cols ...string) (num int64, err error) {
if txDB == nil {
return
}
err = utils.CallFuncLogError(func() error {
num, err = txDB.Delete(item, cols...)
//num, err = db.Db.Delete(item, cols...)
return err
}, reflect.TypeOf(item).Name())
return num, err
}
func ExecuteSQL(db *DaoDB, sql string, params ...interface{}) (num int64, err error) {
if db == nil {
db = GetDB()