From a75ed0f33ce0a51ec3027dbad03ec66ed14144a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Tue, 20 Apr 2021 09:33:30 +0800 Subject: [PATCH] aa --- business/jxstore/cms/cms.go | 10 +- business/jxstore/cms/job.go | 490 +++++++++++++------------- business/jxstore/cms/message.go | 16 +- business/jxstore/cms/order.go | 8 +- business/jxstore/cms/permission.go | 38 +- business/jxstore/cms/user2.go | 46 +-- business/jxstore/event/event.go | 46 +-- business/jxstore/financial/pay.go | 16 +- business/jxstore/initdata/initdata.go | 6 +- business/model/dao/act.go | 12 +- business/model/dao/dao.go | 83 ++++- business/model/dao/dao_bill.go | 8 +- business/model/dao/dao_job.go | 24 +- business/model/dao/dao_order.go | 24 +- business/model/dao/dao_test.go | 62 ---- business/model/dao/dao_user.go | 24 +- business/model/dao/event.go | 16 +- controllers/job_controller.go | 3 +- 18 files changed, 473 insertions(+), 459 deletions(-) delete mode 100644 business/model/dao/dao_test.go diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index d8b1744d2..8e3db4864 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -224,29 +224,29 @@ func UpdateConfig(ctx *jxcontext.Context, key, configType, value string) (hint s hint = "1" db := dao.GetDB() - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() configList, err := dao.QueryConfigs(db, key, configType, "") if err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return "", err } if _, err = dao.UpdateEntityLogically(db, configList[0], map[string]interface{}{ "Value": value, }, ctx.GetUserName(), nil); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return "", err } switch configType { case model.ConfigTypePricePack: default: - dao.Commit(db) + dao.Commit(db, txDB) } if configType == model.ConfigTypeSys && err == nil { // err = onSysConfigChanged(key, value) diff --git a/business/jxstore/cms/job.go b/business/jxstore/cms/job.go index 9852b4fae..9586b7a67 100644 --- a/business/jxstore/cms/job.go +++ b/business/jxstore/cms/job.go @@ -162,15 +162,15 @@ func PublishJob(ctx *jxcontext.Context, jobExt *model.JobExt) (errCode string, e job.Lat = jxutils.StandardCoordinate2Int(lat) } dao.WrapAddIDCULDEntity(job, ctx.GetUserName()) - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() if err = dao.CreateEntity(db, job); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } for _, v := range jobExt.JobSteps { @@ -184,17 +184,17 @@ func PublishJob(ctx *jxcontext.Context, jobExt *model.JobExt) (errCode string, e err = dao.CreateEntity(db, v) } if err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } //发布任务要扣除任务总额的保证金,不够扣就要进行充值 if err == nil && job.Status != model.JobStatusFailed { if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeDeposit, job.TotalPrice, job.ID); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } } - dao.Commit(db) + dao.Commit(db, txDB) content := new(strings.Builder) content.WriteString("您的任务:") content.WriteString(job.Title) @@ -220,10 +220,10 @@ func CancelPublishJob(ctx *jxcontext.Context, jobID int) (err error) { if userBill == nil { return fmt.Errorf("未查询到该用户的账单!") } - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() @@ -241,17 +241,17 @@ 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 { - dao.Rollback(db) + dao.Rollback(db, txDB) return } //3、任务状态被取消 job.Status = model.JobStatusFailed // job.DeletedAt = time.Now() if _, err = dao.UpdateEntity(db, job, "Status"); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } - dao.Commit(db) + dao.Commit(db, txDB) content := new(strings.Builder) content.WriteString("您的任务:") content.WriteString(job.Title) @@ -398,44 +398,44 @@ func AcceptJob(ctx *jxcontext.Context, jobID, dropShippingDeliveryID, dropShippi } else if job.JobCategoryID == model.JobCategoryIDUnion { jobOrder.Status = model.JobOrderStatusSpec } - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() dao.WrapAddIDCULEntity(jobOrder, ctx.GetUserName()) if err = dao.CreateEntity(db, jobOrder); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } //用户接受任务,任务剩余次数-1 job.SurplusCount -= 1 if _, err = dao.UpdateEntity(db, job, "SurplusCount"); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } - dao.Commit(db) + dao.Commit(db, txDB) if job.JobCategoryID == model.JobCategoryIDDropShipping { - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeDropShipping, jobOrder.UserActualPrice, job.ID); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } //一件代发 if err = SubmitJob(ctx, jobOrder); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } - dao.Commit(db) + dao.Commit(db, txDB) } else { //任务限时完成 timer := checkLimitJobOrders(db, job, jobOrder, model.JobTimerTypeAccept) @@ -468,10 +468,10 @@ func CancelAcceptJob(ctx *jxcontext.Context, jobID int, jobOrderID int64) (err e } else { content.WriteString(",已被取消。") } - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() @@ -479,7 +479,7 @@ func CancelAcceptJob(ctx *jxcontext.Context, jobID int, jobOrderID int64) (err e if job.Status >= 0 { job.SurplusCount += 1 if _, err = dao.UpdateEntity(db, job, "SurplusCount"); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } } else { @@ -492,7 +492,7 @@ func CancelAcceptJob(ctx *jxcontext.Context, jobID int, jobOrderID int64) (err e //是固定返现才会退一笔任务单价 if job.CashbackType == model.JobCashbackPrice { if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeJobCancelOverdue, job.AvgPrice, jobID); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return err } } @@ -504,17 +504,17 @@ func CancelAcceptJob(ctx *jxcontext.Context, jobID int, jobOrderID int64) (err e return fmt.Errorf("未查询到该用户的账单!") } if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeJobCancelOverdue, jobOrder.UserActualPrice, jobID); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return err } } //3、任务订单状态被取消 jobOrder.Status = model.JobOrderStatusCancel if _, err = dao.UpdateEntity(db, jobOrder, "Status"); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return err } - dao.Commit(db) + dao.Commit(db, txDB) event.SendSysMessageSimple(content.String(), jobOrder.UserID) return err } @@ -607,18 +607,18 @@ func UpdateDropShippingJobOrders(db *dao.DaoDB, timer *time.Timer, jobID int, jo //如果限时内还没发货 if jobOrder.Status < model.JobOrderStatusFinish { userBill, err := dao.GetUserBill(db, jobOrder.UserID, "") - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeDropShippingDeposit, job.AvgPrice, job.ID); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } - dao.Commit(db) + dao.Commit(db, txDB) } } } @@ -736,15 +736,15 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment, vendorWay } else { content.WriteString(",商家已经审核") } - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() if _, err = dao.UpdateEntity(db, jobOrder, "Status", "Comment", "AuditAt", "LastOperator"); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } if status == model.JobOrderStatusAuditPass { @@ -769,19 +769,19 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment, vendorWay 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 { - dao.Rollback(db) + dao.Rollback(db, txDB) return err } } //接收人账户收入 if err = financial.AddIncomeUpdateAccount(db, userBillJobOrder, model.BillTypeJobDivide, price*(100-messageGroupsResult[0].DividePercentage)/100, job.ID); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return err } } else { //接收人账户收入 if err = financial.AddIncomeUpdateAccount(db, userBillJobOrder, model.BillTypeJob, price, job.ID); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return err } } @@ -790,14 +790,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 { - dao.Rollback(db) + dao.Rollback(db, txDB) return err } } } jobOrder.Status = model.JobOrderStatusFinish if _, err = dao.UpdateEntity(db, jobOrder, "Status"); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return err } content.WriteString(utils.Float64ToStr(jxutils.IntPrice2Standard(int64(price)))) @@ -807,12 +807,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 { - dao.Rollback(db) + 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 { - dao.Rollback(db) + dao.Rollback(db, txDB) return err } } @@ -826,7 +826,7 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment, vendorWay 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) + dao.Rollback(db, txDB) return err } } @@ -834,7 +834,7 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment, vendorWay //审核不通过的话,要重新变成待上传,再重新开个定时器 jobOrder.Status = model.JobOrderStatusAccept if _, err = dao.UpdateEntity(db, jobOrder, "Status"); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } //之前的定时表删了? @@ -843,7 +843,7 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment, vendorWay JobOrderID: jobOrder.JobOrderID, } if _, err = dao.DeleteEntity(db, jobTimer, "JobID", "JobOrderID"); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } //任务限时完成 @@ -854,7 +854,7 @@ func AuditJob(ctx *jxcontext.Context, jobOrderID, status int, comment, vendorWay } event.SendSysMessageSimple(content2.String(), jobOrder.UserID) } - dao.Commit(db) + dao.Commit(db, txDB) //任务定时器停止 JobTimers.s.RLock() if JobTimers.JobAuditTimerMap[int64(jobOrderID)] != nil { @@ -896,10 +896,10 @@ func RefreshJobStatus(ctx *jxcontext.Context) (err error) { if userBill == nil { return fmt.Errorf("未查询到该用户的账单!") } - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() @@ -917,7 +917,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 { - dao.Rollback(db) + dao.Rollback(db, txDB) return err } //3、任务状态被取消 @@ -928,11 +928,11 @@ func RefreshJobStatus(ctx *jxcontext.Context) (err error) { job2.Status = model.JobStatusOverdue // job.DeletedAt = time.Now() if _, err = dao.UpdateEntity(db, job2, "Status"); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return err } } - dao.Commit(db) + dao.Commit(db, txDB) } } globals.SugarLogger.Debugf("RefreshJobStatus end...") @@ -964,10 +964,10 @@ func RechargeMtMembers(ctx *jxcontext.Context, phone int) (errCode string, err e db2 = dao.GetDB() userID = ctx.GetUserID() ) - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() @@ -979,12 +979,12 @@ func RechargeMtMembers(ctx *jxcontext.Context, phone int) (errCode string, err e }) } if err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return errCode, err } //验证微信绑定 if err = auth2.CheckWeixinminiAuthBind(userID); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return "", err } //特殊任务,如美团会员,是直接要支付 @@ -997,15 +997,15 @@ func RechargeMtMembers(ctx *jxcontext.Context, phone int) (errCode string, err e } //账户支出 if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeSpJob, mtwmMemberPrice, 1); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return errCode, err } - dao.Commit(db) + dao.Commit(db, txDB) for { - dao.Begin(db2) + txDB, _ := dao.Begin(db2) defer func() { if r := recover(); r != nil { - dao.Rollback(db2) + dao.Rollback(db2, txDB) panic(r) } }() @@ -1016,7 +1016,7 @@ func RechargeMtMembers(ctx *jxcontext.Context, phone int) (errCode string, err e err = api.MtMemberAPI.RechargeExchange(phone, mtMember.ShortLink) mtMember.DeletedAt = time.Now() dao.UpdateEntity(db2, mtMember, "DeletedAt") - dao.Commit(db2) + dao.Commit(db2, txDB) if err == nil { job, err := dao.GetJob(db2, nil, nil, nil, []int{model.JobTypeMtMember}, utils.ZeroTimeValue, utils.ZeroTimeValue, false) _, errCode, err = AcceptJob(ctx, job.ID, 0, 0) @@ -1117,16 +1117,16 @@ func SendJdDelivery(ctx *jxcontext.Context, dOrder *model.DeliveryOrder) (errCod } dOrder.Status = model.OrderStatusNew dOrder.UserID = ctx.GetUserID() - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() //账户支出明细 if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeSpJob, dOrder.PayPrice, 2); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } dOrder.SendName = sendDelivery.ConsigneeName @@ -1146,10 +1146,10 @@ func SendJdDelivery(ctx *jxcontext.Context, dOrder *model.DeliveryOrder) (errCod dOrder.ReceiveLng = receiveDelivery.Lng dOrder.ReceiveLat = receiveDelivery.Lat if err = dao.CreateEntity(db, dOrder); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } - dao.Commit(db) + dao.Commit(db, txDB) utils.CallFuncAsync(func() { job, _ := dao.GetJob(db, nil, nil, nil, []int{model.JobTypeJdDelivery}, utils.ZeroTimeValue, utils.ZeroTimeValue, false) if jobOrderID, _, err := AcceptJob(ctx, job.ID, 0, 0); err == nil { @@ -1192,25 +1192,25 @@ func CancelJdDelivery(ctx *jxcontext.Context, vendorWaybillID, reason string) (e dOrder.Status = model.OrderStatusCanceled dOrder.OrderFinishedAt = time.Now() dOrder.Comment = reason - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() if _, err = dao.UpdateEntity(db, dOrder, "Status", "OrderFinishedAt", "Comment"); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeSpJob, dOrder.PayPrice, 2); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } if err = CancelAcceptJob(ctx, 2, utils.Str2Int64(dOrder.JobOrderID)); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) } - dao.Commit(db) + dao.Commit(db, txDB) return err } @@ -1531,10 +1531,10 @@ func ConfirmDropShippingJob(ctx *jxcontext.Context, jobOrderID int) (err error) if ctx.GetUserID() != jobOrder.UserID && ctx.GetUserName() != "jxadmin" { return fmt.Errorf("只有任务接取人才能确认收货!") } - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() @@ -1543,15 +1543,15 @@ func ConfirmDropShippingJob(ctx *jxcontext.Context, jobOrderID int) (err error) jobOrder.DropShippingConfirmUser = ctx.GetUserName() jobOrder.Status = model.OrderStatusConfirm if _, err = dao.UpdateEntity(db, jobOrder, "DropShippingConfirmTime", "DropShippingConfirmUser", "Status"); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } userBill, err := dao.GetUserBill(db, job.UserID, "") if err = financial.AddIncomeUpdateAccount(db, userBill, model.BillTypeDropShipping, jobOrder.UserActualPrice, job.ID); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } - dao.Commit(db) + dao.Commit(db, txDB) return err } @@ -1628,15 +1628,15 @@ func UpdateJob(ctx *jxcontext.Context, payload map[string]interface{}) (err erro dao.GetEntity(db, job2) valid := dao.StrictMakeMapByStructObject(payload, job2, ctx.GetUserName()) if len(valid) > 0 { - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() if _, err = dao.UpdateEntityByKV(db, job2, valid, nil); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return err } if len(jobExt.JobSteps) > 0 { @@ -1663,7 +1663,7 @@ func UpdateJob(ctx *jxcontext.Context, payload map[string]interface{}) (err erro dao.CreateEntity(db, v) } } - dao.Commit(db) + dao.Commit(db, txDB) } return err } @@ -1762,163 +1762,163 @@ type Store struct { } func TempJob() (err error) { - var ( - db = dao.GetDB() - ctx = jxcontext.AdminCtx - storesJD []*Store - storesMT []*Store - ) - db.Db.Using("c4") - sql := ` - SELECT a.*, b.vendor_store_id - FROM store a - JOIN store_map b ON a.id = b.store_id AND b.vendor_id = 0 AND b.deleted_at = ? AND b.vendor_store_id <> '' - WHERE a.deleted_at = ? - AND a.id <> 667281 - AND a.id <> 667278 - AND a.status IN (1,0) - ` - sqlParams := []interface{}{utils.DefaultTimeValue, utils.DefaultTimeValue} - if err = dao.GetRows(db, &storesJD, sql, sqlParams); err != nil { - return err - } - sql2 := ` - SELECT a.*, b.vendor_store_id - FROM store a - JOIN store_map b ON a.id = b.store_id AND b.vendor_id = 1 AND b.deleted_at = ? AND b.vendor_store_id <> '' - WHERE a.deleted_at = ? - AND a.id <> 667281 - AND a.id <> 667278 - AND a.status IN (1,0) - ` - sqlParams2 := []interface{}{utils.DefaultTimeValue, utils.DefaultTimeValue} - if err = dao.GetRows(db, &storesMT, sql2, sqlParams2); err != nil { - return err - } - db.Db.Using("default") - task := tasksch.NewParallelTask("TempJob", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx, - func(task2 *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - step := batchItemList[0].(int) - switch step { - case 0: - task := tasksch.NewParallelTask("TempJob1", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - store := batchItemList[0].(*Store) - job := &model.Job{ - UserID: "906380C7390E11EB8831525400C36BDA", - JobCategoryID: 3, - Title: "京东(" + store.Name + ")", - Content: "领取任务后,需要尽快去完成,并提交截图。如超时未完成,任务会被取消", - Count: 1000, - AvgPrice: 300, - TotalPrice: 300000, - Status: 0, - Address: store.Address, - StoreURL: store.VendorStoreID, - SurplusCount: 1000, - JobLimitAt: 72, - AuditLimitAt: 168, - LimitCountType: 3, - VendorID: 0, - CashbackType: 1, - JobLat: jxutils.IntCoordinate2Standard(store.Lat), - JobLng: jxutils.IntCoordinate2Standard(store.Lng), - Lng: store.Lng, - Lat: store.Lat, - JobCityCode: store.CityCode, - } - finishAt := utils.Str2Time("2021-12-31 00:00:00") - job.FinishedAt = &finishAt - dao.WrapAddIDCULDEntity(job, ctx.GetUserName()) - if err = dao.CreateEntity(db, job); err == nil { - jobsteps, _ := dao.GetJobSteps(db, 171) - for _, v := range jobsteps { - jobStep := &model.JobStep{ - JobID: job.ID, - StepCount: v.StepCount, - Content: v.Content, - Img: v.Img, - Type: v.Type, - } - dao.WrapAddIDCULDEntity(jobStep, ctx.GetUserName()) - err = dao.CreateEntity(db, jobStep) - } - jobImgs, _ := dao.GetJobImgs(db, 171) - for _, v := range jobImgs { - jobImg := &model.JobImg{ - JobID: job.ID, - Img: v.Img, - } - dao.WrapAddIDCULEntity(jobImg, ctx.GetUserName()) - err = dao.CreateEntity(db, jobImg) - } - } - return retVal, err - }, storesJD) - tasksch.HandleTask(task, task2, true).Run() - task.GetResult(0) - case 1: - task := tasksch.NewParallelTask("TempJob2", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - store := batchItemList[0].(*Store) - job := &model.Job{ - UserID: "906380C7390E11EB8831525400C36BDA", - JobCategoryID: 3, - Title: "美团(" + store.Name + ")", - Content: "领取任务后,需要尽快去完成,并提交截图。如超时未完成,任务会被取消", - Count: 1000, - AvgPrice: 300, - TotalPrice: 300000, - Status: 0, - Address: store.Address, - StoreURL: store.VendorStoreID, - SurplusCount: 1000, - JobLimitAt: 72, - AuditLimitAt: 168, - LimitCountType: 3, - VendorID: 1, - CashbackType: 1, - JobLat: jxutils.IntCoordinate2Standard(store.Lat), - JobLng: jxutils.IntCoordinate2Standard(store.Lng), - Lng: store.Lng, - Lat: store.Lat, - JobCityCode: store.CityCode, - } - finishAt := utils.Str2Time("2021-12-31 00:00:00") - job.FinishedAt = &finishAt - dao.WrapAddIDCULDEntity(job, ctx.GetUserName()) - if err = dao.CreateEntity(db, job); err == nil { - jobsteps, _ := dao.GetJobSteps(db, 173) - for _, v := range jobsteps { - jobStep := &model.JobStep{ - JobID: job.ID, - StepCount: v.StepCount, - Content: v.Content, - Img: v.Img, - Type: v.Type, - } - dao.WrapAddIDCULDEntity(jobStep, ctx.GetUserName()) - err = dao.CreateEntity(db, jobStep) - } - jobImgs, _ := dao.GetJobImgs(db, 173) - for _, v := range jobImgs { - jobImg := &model.JobImg{ - JobID: job.ID, - Img: v.Img, - } - dao.WrapAddIDCULEntity(jobImg, ctx.GetUserName()) - err = dao.CreateEntity(db, jobImg) - } - } - return retVal, err - }, storesMT) - tasksch.HandleTask(task, task2, true).Run() - task.GetResult(0) - } - return retVal, err - }, []int{0, 1}) - tasksch.HandleTask(task, nil, true).Run() - task.GetID() + //var ( + // db = dao.GetDB() + // ctx = jxcontext.AdminCtx + // storesJD []*Store + // storesMT []*Store + //) + //db.Db.Using("c4") + //sql := ` + // SELECT a.*, b.vendor_store_id + // FROM store a + // JOIN store_map b ON a.id = b.store_id AND b.vendor_id = 0 AND b.deleted_at = ? AND b.vendor_store_id <> '' + // WHERE a.deleted_at = ? + // AND a.id <> 667281 + // AND a.id <> 667278 + // AND a.status IN (1,0) + //` + //sqlParams := []interface{}{utils.DefaultTimeValue, utils.DefaultTimeValue} + //if err = dao.GetRows(db, &storesJD, sql, sqlParams); err != nil { + // return err + //} + //sql2 := ` + // SELECT a.*, b.vendor_store_id + // FROM store a + // JOIN store_map b ON a.id = b.store_id AND b.vendor_id = 1 AND b.deleted_at = ? AND b.vendor_store_id <> '' + // WHERE a.deleted_at = ? + // AND a.id <> 667281 + // AND a.id <> 667278 + // AND a.status IN (1,0) + //` + //sqlParams2 := []interface{}{utils.DefaultTimeValue, utils.DefaultTimeValue} + //if err = dao.GetRows(db, &storesMT, sql2, sqlParams2); err != nil { + // return err + //} + //db.Db.Using("default") + //task := tasksch.NewParallelTask("TempJob", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx, + // func(task2 *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + // step := batchItemList[0].(int) + // switch step { + // case 0: + // task := tasksch.NewParallelTask("TempJob1", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx, + // func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + // store := batchItemList[0].(*Store) + // job := &model.Job{ + // UserID: "906380C7390E11EB8831525400C36BDA", + // JobCategoryID: 3, + // Title: "京东(" + store.Name + ")", + // Content: "领取任务后,需要尽快去完成,并提交截图。如超时未完成,任务会被取消", + // Count: 1000, + // AvgPrice: 300, + // TotalPrice: 300000, + // Status: 0, + // Address: store.Address, + // StoreURL: store.VendorStoreID, + // SurplusCount: 1000, + // JobLimitAt: 72, + // AuditLimitAt: 168, + // LimitCountType: 3, + // VendorID: 0, + // CashbackType: 1, + // JobLat: jxutils.IntCoordinate2Standard(store.Lat), + // JobLng: jxutils.IntCoordinate2Standard(store.Lng), + // Lng: store.Lng, + // Lat: store.Lat, + // JobCityCode: store.CityCode, + // } + // finishAt := utils.Str2Time("2021-12-31 00:00:00") + // job.FinishedAt = &finishAt + // dao.WrapAddIDCULDEntity(job, ctx.GetUserName()) + // if err = dao.CreateEntity(db, job); err == nil { + // jobsteps, _ := dao.GetJobSteps(db, 171) + // for _, v := range jobsteps { + // jobStep := &model.JobStep{ + // JobID: job.ID, + // StepCount: v.StepCount, + // Content: v.Content, + // Img: v.Img, + // Type: v.Type, + // } + // dao.WrapAddIDCULDEntity(jobStep, ctx.GetUserName()) + // err = dao.CreateEntity(db, jobStep) + // } + // jobImgs, _ := dao.GetJobImgs(db, 171) + // for _, v := range jobImgs { + // jobImg := &model.JobImg{ + // JobID: job.ID, + // Img: v.Img, + // } + // dao.WrapAddIDCULEntity(jobImg, ctx.GetUserName()) + // err = dao.CreateEntity(db, jobImg) + // } + // } + // return retVal, err + // }, storesJD) + // tasksch.HandleTask(task, task2, true).Run() + // task.GetResult(0) + // case 1: + // task := tasksch.NewParallelTask("TempJob2", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx, + // func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + // store := batchItemList[0].(*Store) + // job := &model.Job{ + // UserID: "906380C7390E11EB8831525400C36BDA", + // JobCategoryID: 3, + // Title: "美团(" + store.Name + ")", + // Content: "领取任务后,需要尽快去完成,并提交截图。如超时未完成,任务会被取消", + // Count: 1000, + // AvgPrice: 300, + // TotalPrice: 300000, + // Status: 0, + // Address: store.Address, + // StoreURL: store.VendorStoreID, + // SurplusCount: 1000, + // JobLimitAt: 72, + // AuditLimitAt: 168, + // LimitCountType: 3, + // VendorID: 1, + // CashbackType: 1, + // JobLat: jxutils.IntCoordinate2Standard(store.Lat), + // JobLng: jxutils.IntCoordinate2Standard(store.Lng), + // Lng: store.Lng, + // Lat: store.Lat, + // JobCityCode: store.CityCode, + // } + // finishAt := utils.Str2Time("2021-12-31 00:00:00") + // job.FinishedAt = &finishAt + // dao.WrapAddIDCULDEntity(job, ctx.GetUserName()) + // if err = dao.CreateEntity(db, job); err == nil { + // jobsteps, _ := dao.GetJobSteps(db, 173) + // for _, v := range jobsteps { + // jobStep := &model.JobStep{ + // JobID: job.ID, + // StepCount: v.StepCount, + // Content: v.Content, + // Img: v.Img, + // Type: v.Type, + // } + // dao.WrapAddIDCULDEntity(jobStep, ctx.GetUserName()) + // err = dao.CreateEntity(db, jobStep) + // } + // jobImgs, _ := dao.GetJobImgs(db, 173) + // for _, v := range jobImgs { + // jobImg := &model.JobImg{ + // JobID: job.ID, + // Img: v.Img, + // } + // dao.WrapAddIDCULEntity(jobImg, ctx.GetUserName()) + // err = dao.CreateEntity(db, jobImg) + // } + // } + // return retVal, err + // }, storesMT) + // tasksch.HandleTask(task, task2, true).Run() + // task.GetResult(0) + // } + // return retVal, err + // }, []int{0, 1}) + //tasksch.HandleTask(task, nil, true).Run() + //task.GetID() return err } @@ -1929,6 +1929,18 @@ func GetUnionActList(ctx *jxcontext.Context, vendorID, actType int) (actList []* return actList, err } -func ShareUnionLink(ctx *jxcontext.Context, vendorID, linkType int) (link string, err error) { - return partner.GetHandler(vendorID).ShareUnionLink(ctx, linkType) +func ShareUnionLink(ctx *jxcontext.Context, jobID, linkType int) (link string, err error) { + var ( + db = dao.GetDB() + job = &model.Job{} + ) + job.ID = jobID + err = dao.GetEntity(db, job) + if err != nil { + return link, err + } + if handler := partner.GetHandler(job.VendorID); handler != nil { + handler.ShareUnionLink(ctx, linkType) + } + return link, err } diff --git a/business/jxstore/cms/message.go b/business/jxstore/cms/message.go index 4ce418a22..74113473b 100644 --- a/business/jxstore/cms/message.go +++ b/business/jxstore/cms/message.go @@ -65,13 +65,13 @@ func GetStoreMessages(ctx *jxcontext.Context, msgIDs, storeIDs, types []int, fro pageSize = jxutils.FormalizePageSize(pageSize) sqlParams = append(sqlParams, pageSize, offset) db := dao.GetDB() - dao.Begin(db) - defer dao.Commit(db) + txDB, _ := dao.Begin(db) + defer dao.Commit(db, txDB) var msgList []*model.Message // globals.SugarLogger.Debug(sql) - if err = dao.GetRows(db, &msgList, sql, sqlParams...); err == nil { + if err = dao.GetRowsTx(txDB, &msgList, sql, sqlParams...); err == nil { pagedInfo = &model.PagedInfo{ - TotalCount: dao.GetLastTotalRowCount(db), + TotalCount: dao.GetLastTotalRowCountTx(txDB), Data: msgList, } } @@ -120,14 +120,14 @@ func GetStoreMessageStatuses(ctx *jxcontext.Context, msgIDs, storeIDs []int, fro sql += " LIMIT ? OFFSET ?" sqlParams = append(sqlParams, jxutils.FormalizePageSize(pageSize), offset) db := dao.GetDB() - dao.Begin(db) - defer dao.Commit(db) + txDB, _ := dao.Begin(db) + defer dao.Commit(db, txDB) var msgStatusList []*MessageStatusExt // globals.SugarLogger.Debug(sql) // globals.SugarLogger.Debug(utils.Format4Output(sqlParams, false)) - if err = dao.GetRows(db, &msgStatusList, sql, sqlParams...); err == nil { + if err = dao.GetRowsTx(txDB, &msgStatusList, sql, sqlParams...); err == nil { pagedInfo = &model.PagedInfo{ - TotalCount: dao.GetLastTotalRowCount(db), + TotalCount: dao.GetLastTotalRowCountTx(txDB), Data: msgStatusList, } } diff --git a/business/jxstore/cms/order.go b/business/jxstore/cms/order.go index 65892b152..f0e30d17e 100644 --- a/business/jxstore/cms/order.go +++ b/business/jxstore/cms/order.go @@ -63,17 +63,17 @@ func CreateOrder(ctx *jxcontext.Context, type1, orderType int, way string, price CityCode: cCode, } dao.WrapAddIDCULEntity(order, ctx.GetUserName()) - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() if err = dao.CreateEntity(db, order); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) } - dao.Commit(db) + dao.Commit(db, txDB) return order.OrderID, errCode, err } diff --git a/business/jxstore/cms/permission.go b/business/jxstore/cms/permission.go index b67efa86d..3c2317872 100644 --- a/business/jxstore/cms/permission.go +++ b/business/jxstore/cms/permission.go @@ -31,16 +31,16 @@ func AddMenu(ctx *jxcontext.Context, menu *model.Menu) (err error) { if len(menus) > 0 { return fmt.Errorf("添加失败!已存在相同名称的 menu name : %v", menu.Name) } - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() dao.WrapAddIDCULDEntity(menu, ctx.GetUserName()) err = dao.CreateEntity(db, menu) - dao.Commit(db) + dao.Commit(db, txDB) return err } @@ -54,10 +54,10 @@ func UpdateMenu(ctx *jxcontext.Context, menuID int, payload map[string]interface if err != nil { return 0, err } - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() @@ -65,7 +65,7 @@ func UpdateMenu(ctx *jxcontext.Context, menuID int, payload map[string]interface valid := dao.StrictMakeMapByStructObject(payload, menu, ctx.GetUserName()) if len(valid) > 0 { if num, err = dao.UpdateEntityLogically(db, menu, valid, ctx.GetUserName(), nil); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return 0, err } } @@ -73,7 +73,7 @@ func UpdateMenu(ctx *jxcontext.Context, menuID int, payload map[string]interface menu.DeletedAt = time.Now() num, err = dao.UpdateEntity(db, menu, "DeletedAt") } - dao.Commit(db) + dao.Commit(db, txDB) return num, err } @@ -92,16 +92,16 @@ func AddRole(ctx *jxcontext.Context, name string) (err error) { role := &model.Role{ Name: name, } - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() dao.WrapAddIDCULDEntity(role, ctx.GetUserName()) err = dao.CreateEntity(db, role) - dao.Commit(db) + dao.Commit(db, txDB) return err } @@ -118,10 +118,10 @@ func UpdateRole(ctx *jxcontext.Context, roleID int, name string, isDelete bool) if err != nil { return 0, err } - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() @@ -134,7 +134,7 @@ func UpdateRole(ctx *jxcontext.Context, roleID int, name string, isDelete bool) role.DeletedAt = time.Now() num, err = dao.UpdateEntity(db, role, "DeletedAt") } - dao.Commit(db) + dao.Commit(db, txDB) return num, err } @@ -177,10 +177,10 @@ func UpdateUserRole(ctx *jxcontext.Context, userIDs []string, roleIDs []int) (er } } } - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() @@ -208,7 +208,7 @@ func UpdateUserRole(ctx *jxcontext.Context, userIDs []string, roleIDs []int) (er } } } - dao.Commit(db) + dao.Commit(db, txDB) return err } @@ -251,10 +251,10 @@ func UpdateRoleMenu(ctx *jxcontext.Context, roleIDs, menuIDs []int) (err error) } } } - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() @@ -282,6 +282,6 @@ func UpdateRoleMenu(ctx *jxcontext.Context, roleIDs, menuIDs []int) (err error) } } } - dao.Commit(db) + dao.Commit(db, txDB) return err } diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index 0257529ff..f305ca35e 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -361,23 +361,23 @@ func UpdateUserDeliveryAddress(ctx *jxcontext.Context, userID string, addressID return err } } - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() if utils.ForceInterface2Int64(valid["isDefault"]) == 1 { if err = dao.ClearUserDeliveryAddressDefault(db, userID, 0); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return err } } if _, err = dao.UpdateEntityLogically(db, address, valid, ctx.GetUserName(), nil); err == nil { - dao.Commit(db) + dao.Commit(db, txDB) } else { - dao.Rollback(db) + dao.Rollback(db, txDB) } } } @@ -417,25 +417,25 @@ func AddUserDeliveryAddress(ctx *jxcontext.Context, address *model.UserDeliveryA address.AutoAddress, address.DistrictCode, address.CityCode, err = getAddressInfoFromCoord(db, lng, lat) if err == nil { globals.SugarLogger.Debugf("AddUserDeliveryAddress2 address:%s", utils.Format4Output(address, true)) - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() dao.WrapAddIDCULDEntity(address, ctx.GetUserName()) if address.IsDefault == 1 { if err = dao.ClearUserDeliveryAddressDefault(db, address.UserID, 0); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return nil, err } } if err = dao.CreateEntity(db, address); err == nil { - dao.Commit(db) + dao.Commit(db, txDB) outAddress = address } else { - dao.Rollback(db) + dao.Rollback(db, txDB) } } globals.SugarLogger.Debugf("AddUserDeliveryAddress3 address:%s", utils.Format4Output(address, true)) @@ -452,10 +452,10 @@ func SaveUserCart(ctx *jxcontext.Context, userID string, storeID int, cartItems dao.WrapAddIDCULEntity(v, userID) } db := dao.GetDB() - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil || err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) if r != nil { panic(r) } @@ -473,7 +473,7 @@ func SaveUserCart(ctx *jxcontext.Context, userID string, storeID int, cartItems err = dao.CreateMultiEntities(db, cartItems) } if err == nil { - dao.Commit(db) + dao.Commit(db, txDB) } return err } @@ -563,10 +563,10 @@ func InvestMember(ctx *jxcontext.Context, memberID int, userID string, isFree bo return model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足,请充值!") } } - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() @@ -579,7 +579,7 @@ func InvestMember(ctx *jxcontext.Context, memberID int, userID string, isFree bo userMember.EndAt = userMember.EndAt.AddDate(1, 0, 0) } if _, err = dao.UpdateEntity(db, userMember, "EndAt"); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } } else { @@ -595,18 +595,18 @@ func InvestMember(ctx *jxcontext.Context, memberID int, userID string, isFree bo } dao.WrapAddIDCULDEntity(userMember2, ctx.GetUserName()) if err = dao.CreateEntity(db, userMember2); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } } if !isFree { //支出明细 if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeMember, memberCard.Price, 0); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return } } - dao.Commit(db) + dao.Commit(db, txDB) return errCode, err } @@ -648,18 +648,18 @@ func UpdateUser(ctx *jxcontext.Context, payload map[string]interface{}) (err err } valid := dao.StrictMakeMapByStructObject(payload, user, ctx.GetUserName()) if len(valid) > 0 { - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() if _, err = dao.UpdateEntityByKV(db, user, valid, nil); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return err } - dao.Commit(db) + dao.Commit(db, txDB) } if payload["popUser"] != nil { // InvestMemberAndUpdate := func(user *model.User) (err error) { diff --git a/business/jxstore/event/event.go b/business/jxstore/event/event.go index 071014ec9..6a03d6d77 100644 --- a/business/jxstore/event/event.go +++ b/business/jxstore/event/event.go @@ -217,45 +217,45 @@ func AddOperateEvent(ctx *jxcontext.Context, accessUUID, jsonData string, errCod ErrMsg: errMsg, UseTime: useTime, } - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() err = dao.CreateEntity(db, event) - dao.Commit(db) + dao.Commit(db, txDB) return err } func AddOperateEventDetail(db *dao.DaoDB, operateEventDetail *model.OperateEventDetail) (err error) { - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() operateEventDetail.BeforeData = utils.LimitUTF8StringLen(operateEventDetail.BeforeData, 3200) operateEventDetail.AfterData = utils.LimitUTF8StringLen(operateEventDetail.AfterData, 3200) err = dao.CreateEntity(db, operateEventDetail) - dao.Commit(db) + dao.Commit(db, txDB) return err } func DeleteOperateEventAndDetail(ctx *jxcontext.Context, deleteTime time.Time) (err error) { db := dao.GetDB() - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() dao.DeleteOperateEventDetail(db, deleteTime) dao.DeleteOperateEvent(db, deleteTime) - dao.Commit(db) + dao.Commit(db, txDB) return err } @@ -538,18 +538,18 @@ func UpdateMessageGroup(ctx *jxcontext.Context, groupID int, payload map[string] } valid := dao.StrictMakeMapByStructObject(payload, messageGroup, ctx.GetUserName()) if len(valid) > 0 { - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() if num, err = dao.UpdateEntityLogically(db, messageGroup, valid, ctx.GetUserName(), nil); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return 0, err } - dao.Commit(db) + dao.Commit(db, txDB) } return num, err } @@ -600,24 +600,24 @@ func DeleteMessageGroup(ctx *jxcontext.Context, groupID int, userID string, flag if userBill.AccountBalance < quitPrice { return model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足,请充值!") } - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() //账户支出 if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeQuitGroup, quitPrice, 0); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return errCode, err } //群主收到退团金额 if err = financial.AddIncomeUpdateAccount(db, userBillGroupMaster, model.BillTypeQuitGroup, quitPrice, 0); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return errCode, err } - dao.Commit(db) + dao.Commit(db, txDB) } messageGroupMembers, err := dao.GetMessageGroupMembers(db, groupID, 0, userID) if err != nil { @@ -654,22 +654,22 @@ func TransferMessageGroupMaster(ctx *jxcontext.Context, groupID int, userID stri messageGroupMember := messageGroupMembers[0] messageGroupMember.MemberUserID = ctx.GetUserID() messageGroupMember.LastOperator = ctx.GetUserName() - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() if _, err = dao.UpdateEntity(db, messageGroup, "UserID", "LastOperator"); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return err } if _, err = dao.UpdateEntity(db, messageGroupMember, "MemberUserID", "LastOperator"); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) return err } - dao.Commit(db) + dao.Commit(db, txDB) return err } diff --git a/business/jxstore/financial/pay.go b/business/jxstore/financial/pay.go index 6ec846a96..6844c55fe 100644 --- a/business/jxstore/financial/pay.go +++ b/business/jxstore/financial/pay.go @@ -40,10 +40,10 @@ func OnPayFinished(order *model.Order) (err error) { db = dao.GetDB() ) globals.SugarLogger.Debugf("OnPayFinished begin modify account order: %v", utils.Format4Output(order, false)) - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() @@ -59,13 +59,13 @@ func OnPayFinished(order *model.Order) (err error) { //如果是账户充值(发布任务等) //账户收入 if err = AddIncomeUpdateAccount(db, userBill, model.BillTypeInvest, order.PayPrice, 0); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) } default: globals.SugarLogger.Debugf("OnPayFinished 暂不支持此订单类型 order: %v", utils.Format4Output(order, false)) return fmt.Errorf("暂不支持此订单类型!") } - dao.Commit(db) + dao.Commit(db, txDB) globals.SugarLogger.Debugf("OnPayFinished end modify account ...") return err } @@ -75,10 +75,10 @@ func OnCashFinished(order *model.Order) (err error) { db = dao.GetDB() ) globals.SugarLogger.Debugf("OnCashFinished begin modify account order: %v", utils.Format4Output(order, false)) - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) panic(r) } }() @@ -94,13 +94,13 @@ func OnCashFinished(order *model.Order) (err error) { //如果是账户提现 //账户支出 if err = AddExpendUpdateAccount(db, userBill, model.BillTypeCash, order.PayPrice, 0); err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) } default: globals.SugarLogger.Debugf("OnPayFinished 暂不支持此订单类型 order: %v", utils.Format4Output(order, false)) return fmt.Errorf("暂不支持此订单类型!") } - dao.Commit(db) + dao.Commit(db, txDB) globals.SugarLogger.Debugf("OnCashFinished end modify account ...") return err } diff --git a/business/jxstore/initdata/initdata.go b/business/jxstore/initdata/initdata.go index f8afc6384..46ee3bc0c 100644 --- a/business/jxstore/initdata/initdata.go +++ b/business/jxstore/initdata/initdata.go @@ -48,10 +48,10 @@ func InitPlace(ctx *jxcontext.Context) (err error) { } placeList = placeList[0].Districts db := dao.GetDB() - dao.Begin(db) + txDB, _ := dao.Begin(db) defer func() { if r := recover(); r != nil || err != nil { - dao.Rollback(db) + dao.Rollback(db, txDB) if r != nil { panic(r) } @@ -67,7 +67,7 @@ func InitPlace(ctx *jxcontext.Context) (err error) { if err = insertPlace(ctx, db, nil, placeList); err != nil { return err } - dao.Commit(db) + dao.Commit(db, txDB) return err } diff --git a/business/model/dao/act.go b/business/model/dao/act.go index 1dbd1692c..6e470673c 100644 --- a/business/model/dao/act.go +++ b/business/model/dao/act.go @@ -292,20 +292,20 @@ func QueryActs(db *DaoDB, actID int, offset, pageSize int, syncStatus int, keywo sqlParams = append(sqlParams, pageSize, offset) var idList []int - Begin(db) + txDB, _ := Begin(db) defer func() { if r := recover(); r != nil { - Rollback(db) + Rollback(db, txDB) panic(r) } }() // globals.SugarLogger.Debug(sql) - if err = GetRows(db, &idList, sql, sqlParams...); err != nil || len(idList) == 0 { - Rollback(db) + if err = GetRowsTx(txDB, &idList, sql, sqlParams...); err != nil || len(idList) == 0 { + Rollback(db, txDB) return pagedInfo, err } - pagedInfo.TotalCount = GetLastTotalRowCount(db) - Commit(db) + pagedInfo.TotalCount = GetLastTotalRowCountTx(txDB) + Commit(db, txDB) sql = ` SELECT diff --git a/business/model/dao/dao.go b/business/model/dao/dao.go index 4e3f729ce..2171518e4 100644 --- a/business/model/dao/dao.go +++ b/business/model/dao/dao.go @@ -8,7 +8,7 @@ import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/globals" - "github.com/astaxie/beego/adapter/orm" + "github.com/astaxie/beego/client/orm" ) const ( @@ -65,15 +65,15 @@ func GetDB() *DaoDB { return &DaoDB{Db: orm.NewOrm()} } -func Begin(db *DaoDB) (err error) { +func Begin(db *DaoDB) (txDB orm.TxOrmer, err error) { if db.transactionLevel == 0 { - err = db.Db.Begin() + txDB, err = db.Db.Begin() if err == nil { db.startWatchTransaction() } } db.transactionLevel++ - return err + return txDB, err } func (db *DaoDB) startWatchTransaction() { @@ -93,11 +93,11 @@ func (db *DaoDB) stopWatchTransaction() { } } -func Commit(db *DaoDB) (err error) { +func Commit(db *DaoDB, txDB orm.TxOrmer) (err error) { if db.transactionLevel == 1 { db.stopWatchTransaction() - - err = db.Db.Commit() + err = txDB.Commit() + //err = db.Db.Commit() db.transactionLevel = 0 } else if db.transactionLevel > 1 { db.transactionLevel-- @@ -105,11 +105,11 @@ func Commit(db *DaoDB) (err error) { return err } -func Rollback(db *DaoDB) (err error) { +func Rollback(db *DaoDB, txDB orm.TxOrmer) (err error) { if db.transactionLevel > 0 { db.stopWatchTransaction() - - err = db.Db.Rollback() + err = txDB.Rollback() + //err = db.Db.Rollback() } db.transactionLevel = 0 return err @@ -139,6 +139,31 @@ func GetRow(db *DaoDB, inPtr interface{}, sql string, values ...interface{}) (er return err } +func GetRowTx(txDB orm.TxOrmer, inPtr interface{}, sql string, values ...interface{}) (err error) { + if txDB == nil { + return + } + if !useGetRowsWhenGetRow { // beego QueryRow有bug,嵌入的struct不能正常绑定 + err = txDB.Raw(sql, values).QueryRow(inPtr) + //err = db.Db.Raw(sql, values).QueryRow(inPtr) + } else { + typeInfo := reflect.TypeOf(inPtr) + if typeInfo.Kind() != reflect.Ptr { + return errors.New("inPtr must be ptr") + } + slice := reflect.New(reflect.SliceOf(typeInfo.Elem())) + if err = GetRowsTx(txDB, slice.Interface(), sql, values...); err == nil { + slice = slice.Elem() + if slice.Len() > 0 { + reflect.ValueOf(inPtr).Elem().Set(slice.Index(0)) + } else { + return orm.ErrNoRows + } + } + } + return err +} + func GetRows(db *DaoDB, inPtr interface{}, sql string, values ...interface{}) (err error) { if db == nil { db = GetDB() @@ -147,6 +172,15 @@ func GetRows(db *DaoDB, inPtr interface{}, sql string, values ...interface{}) (e return err } +func GetRowsTx(txDB orm.TxOrmer, inPtr interface{}, sql string, values ...interface{}) (err error) { + if txDB == nil { + return + } + _, err = txDB.Raw(sql, values).QueryRows(inPtr) + //_, err = db.Db.Raw(sql, values).QueryRows(inPtr) + return err +} + func GetEntity(db *DaoDB, item interface{}, cols ...string) (err error) { if db == nil { db = GetDB() @@ -178,6 +212,27 @@ func CreateEntity(db *DaoDB, item interface{}) (err error) { return err } +func UpdateEntityTx(txDB orm.TxOrmer, item interface{}, cols ...string) (num int64, err error) { + if txDB == nil { + return + } + num, err = txDB.Update(item, cols...) + if err != nil && !IsDuplicateError(err) { + globals.SugarLogger.Errorf("UpdateEntity %s failed with error:%v", reflect.TypeOf(item).Name(), err) + } + return num, err +} + +func CreateEntityTx(txDB orm.TxOrmer, item interface{}) (err error) { + if txDB == nil { + return + } + if _, err = txDB.Insert(item); err != nil && !IsDuplicateError(err) { + globals.SugarLogger.Errorf("CreateEntity %s failed with error:%v", reflect.TypeOf(item).Name(), err) + } + return err +} + // InsertMulti执行成功后ID不会改写成正确的(象Insert一样) func CreateMultiEntities(db *DaoDB, item interface{}) (err error) { if db == nil { @@ -230,3 +285,11 @@ func GetLastTotalRowCount(db *DaoDB) int { } return 0 } + +func GetLastTotalRowCountTx(txDB orm.TxOrmer) int { + countInfo := &struct{ Ct int }{} + if err := GetRowTx(txDB, countInfo, "SELECT FOUND_ROWS() ct"); err == nil { + return countInfo.Ct + } + return 0 +} diff --git a/business/model/dao/dao_bill.go b/business/model/dao/dao_bill.go index 56dcbd2a1..49266700e 100644 --- a/business/model/dao/dao_bill.go +++ b/business/model/dao/dao_bill.go @@ -115,11 +115,11 @@ func GetUserBillDetail(db *DaoDB, userID string, fromTime, toTime time.Time, pag ` pageSize = jxutils.FormalizePageSize(pageSize) sqlParams = append(sqlParams, pageSize, offset) - Begin(db) - defer Commit(db) - if err = GetRows(db, &userBillDetails, sql, sqlParams...); err == nil { + txDB, _ := Begin(db) + defer Commit(db, txDB) + if err = GetRowsTx(txDB, &userBillDetails, sql, sqlParams...); err == nil { pagedInfo = &model.PagedInfo{ - TotalCount: GetLastTotalRowCount(db), + TotalCount: GetLastTotalRowCountTx(txDB), Data: userBillDetails, } } diff --git a/business/model/dao/dao_job.go b/business/model/dao/dao_job.go index c6bdd09f1..e4cca913d 100644 --- a/business/model/dao/dao_job.go +++ b/business/model/dao/dao_job.go @@ -137,11 +137,11 @@ func GetJobs(db *DaoDB, userIDs []string, categoryIDs, statuss, vendorIDs, types sql += " LIMIT ? OFFSET ?" pageSize = jxutils.FormalizePageSize(pageSize) sqlParams = append(sqlParams, pageSize, offset) - Begin(db) - defer Commit(db) - if err = GetRows(db, &jobs, sql, sqlParams...); err == nil { + txDB, _ := Begin(db) + defer Commit(db, txDB) + if err = GetRowsTx(txDB, &jobs, sql, sqlParams...); err == nil { pagedInfo = &model.PagedInfo{ - TotalCount: GetLastTotalRowCount(db), + TotalCount: GetLastTotalRowCountTx(txDB), // Data: jobs, } for _, v := range jobs { @@ -358,11 +358,11 @@ func GetJobOrders(db *DaoDB, jobID int, jobOrderID int64, userID, jobUserID stri sql += " LIMIT ? OFFSET ?" pageSize = jxutils.FormalizePageSize(pageSize) sqlParams = append(sqlParams, pageSize, offset) - Begin(db) - defer Commit(db) - if err = GetRows(db, &jobOrders, sql, sqlParams...); err == nil { + txDB, _ := Begin(db) + defer Commit(db, txDB) + if err = GetRowsTx(txDB, &jobOrders, sql, sqlParams...); err == nil { pagedInfo = &model.PagedInfo{ - TotalCount: GetLastTotalRowCount(db), + TotalCount: GetLastTotalRowCountTx(txDB), // Data: jobOrders, } for _, v := range jobOrders { @@ -490,11 +490,11 @@ func GetStationInfoList(db *DaoDB, stationName string, cityCode int, lat, lng fl sql += " LIMIT ? OFFSET ?" pageSize = jxutils.FormalizePageSize(pageSize) sqlParams = append(sqlParams, pageSize, offset) - Begin(db) - defer Commit(db) - if err = GetRows(db, &stations, sql, sqlParams...); err == nil { + txDB, _ := Begin(db) + defer Commit(db, txDB) + if err = GetRowsTx(txDB, &stations, sql, sqlParams...); err == nil { pagedInfo = &model.PagedInfo{ - TotalCount: GetLastTotalRowCount(db), + TotalCount: GetLastTotalRowCountTx(txDB), // Data: stations, } for _, v := range stations { diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index c8e97d969..a1f0e1f44 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -75,13 +75,13 @@ func GetDeliveryOrders(db *DaoDB, userIDs []string, statuss []int, fromTime, toT sql += " LIMIT ? OFFSET ?" pageSize = jxutils.FormalizePageSize(pageSize) sqlParams = append(sqlParams, pageSize, offset) - Begin(db) - defer Commit(db) + txDB, _ := Begin(db) + defer Commit(db, txDB) fmt.Println(sql) fmt.Println(sqlParams) - if err = GetRows(db, &dOrders, sql, sqlParams...); err == nil { + if err = GetRowsTx(txDB, &dOrders, sql, sqlParams...); err == nil { pagedInfo = &model.PagedInfo{ - TotalCount: GetLastTotalRowCount(db), + TotalCount: GetLastTotalRowCountTx(txDB), // Data: dOrders, } for _, v := range dOrders { @@ -170,11 +170,11 @@ func GetOrders(db *DaoDB, orderID, userID string, orderType int, cityCodes []int sql += " LIMIT ? OFFSET ?" pageSize = jxutils.FormalizePageSize(pageSize) sqlParams = append(sqlParams, pageSize, offset) - Begin(db) - defer Commit(db) - if err = GetRows(db, &orders, sql, sqlParams); err == nil { + txDB, _ := Begin(db) + defer Commit(db, txDB) + if err = GetRowsTx(txDB, &orders, sql, sqlParams); err == nil { pagedInfo = &model.PagedInfo{ - TotalCount: GetLastTotalRowCount(db), + TotalCount: GetLastTotalRowCountTx(txDB), Data: orders, } } @@ -506,13 +506,13 @@ func GetManageStatisticsJob(db *DaoDB, cityCodes []int, fromTime, toTime time.Ti sql += " LIMIT ? OFFSET ?" pageSize = jxutils.FormalizePageSize(pageSize) sqlParams = append(sqlParams, pageSize, offset) - Begin(db) - defer Commit(db) - err = GetRows(db, &getManageStatisticsJobResult, sql, sqlParams) + txDB, _ := Begin(db) + defer Commit(db, txDB) + err = GetRowsTx(txDB, &getManageStatisticsJobResult, sql, sqlParams) if err == nil { pageInfo = &model.PagedInfo{ Data: getManageStatisticsJobResult, - TotalCount: GetLastTotalRowCount(db), + TotalCount: GetLastTotalRowCountTx(txDB), } } return pageInfo, err diff --git a/business/model/dao/dao_test.go b/business/model/dao/dao_test.go deleted file mode 100644 index 8132962c4..000000000 --- a/business/model/dao/dao_test.go +++ /dev/null @@ -1,62 +0,0 @@ -package dao - -import ( - "testing" - - "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/globals" - "git.rosy.net.cn/jx-callback/globals/testinit" -) - -func init() { - testinit.Init() -} - -func TestSelectEntities(t *testing.T) { - places := []*model.Place{} - GetRows(nil, &places, ` - SELECT DISTINCT t3.* - FROM sku_name_place_bind t1 - JOIN place t2 ON t1.place_code = t2.code - JOIN place t3 ON (t2.level = 2 AND t2.code = t3.code) OR (t2.level = 1 AND t2.code = t3.parent_code) - WHERE t1.name_id = ? - `, 40) - - globals.SugarLogger.Debug(utils.Format4Output(places, false)) -} - -func TestGetPlaceByName(t *testing.T) { - result, err := GetPlaceByName(nil, "青羊", 3, 510100) - if err != nil { - t.Fatal(err) - } - t.Log(result) -} - -func TestUpdateKV(t *testing.T) { - dummy := &model.Store{} - kvs := map[string]interface{}{ - "status": 100, - "Tel1": "tel1", - "tEl2": "tel2", - "deliveryRangeType": 15, - } - cond := map[string]interface{}{ - "id": 100002, - } - num, err := UpdateEntityLogically(nil, dummy, kvs, "autotest", cond) - if err != nil { - t.Fatal(err) - } - t.Log(num) -} - -func TestWrapAddIDCULEntity(t *testing.T) { - dummy := &model.Store{} - WrapAddIDCULEntity(dummy, "autotest") - if dummy.LastOperator != "autotest" { - t.Fatal("last operator is not same") - } - t.Log(dummy) -} diff --git a/business/model/dao/dao_user.go b/business/model/dao/dao_user.go index 304b16bb2..b6baa7129 100644 --- a/business/model/dao/dao_user.go +++ b/business/model/dao/dao_user.go @@ -106,10 +106,10 @@ func GetUsers(db *DaoDB, userType int, keyword, popUser string, userIDs, userID2 } sql += " LIMIT ? OFFSET ?" sqlParams = append(sqlParams, pageSize, offset) - Begin(db) - defer Commit(db) - if err = GetRows(db, &userList, sql, sqlParams...); err == nil { - totalCount = GetLastTotalRowCount(db) + txDB, _ := Begin(db) + defer Commit(db, txDB) + if err = GetRowsTx(txDB, &userList, sql, sqlParams...); err == nil { + totalCount = GetLastTotalRowCountTx(txDB) } return userList, totalCount, err } @@ -210,11 +210,11 @@ func GetUsers2(db *DaoDB, keyword string, userID string, pop int, mobile string, } sql += " LIMIT ? OFFSET ?" sqlParams = append(sqlParams, pageSize, offset) - Begin(db) - defer Commit(db) - if err = GetRows(db, &userList, sql, sqlParams...); err == nil { + txDB, _ := Begin(db) + defer Commit(db, txDB) + if err = GetRowsTx(txDB, &userList, sql, sqlParams...); err == nil { pageInfo = &model.PagedInfo{ - TotalCount: GetLastTotalRowCount(db), + TotalCount: GetLastTotalRowCountTx(txDB), Data: userList, } } @@ -292,10 +292,10 @@ func QueryUserDeliveryAddress(db *DaoDB, addressID int64, userIDs []string, addT LIMIT ? OFFSET ?` sqlParams = append(sqlParams, pageSize, offset) - Begin(db) - defer Commit(db) - if err = GetRows(db, &addressList, sql, sqlParams...); err == nil { - totalCount = GetLastTotalRowCount(db) + txDB, _ := Begin(db) + defer Commit(db, txDB) + if err = GetRowsTx(txDB, &addressList, sql, sqlParams...); err == nil { + totalCount = GetLastTotalRowCountTx(txDB) } return addressList, totalCount, err } diff --git a/business/model/dao/event.go b/business/model/dao/event.go index fa131f37e..f2f531d04 100644 --- a/business/model/dao/event.go +++ b/business/model/dao/event.go @@ -108,10 +108,10 @@ func GetOperateEvents(db *DaoDB, name string, apiFunctions []string, operateType LIMIT ? OFFSET ? ` sqlParams = append(sqlParams, pageSize, offset) - Begin(db) - defer Commit(db) - if err = GetRows(db, &operateEventExt, sql, sqlParams...); err == nil { - totalCount = GetLastTotalRowCount(db) + txDB, _ := Begin(db) + defer Commit(db, txDB) + if err = GetRowsTx(txDB, &operateEventExt, sql, sqlParams...); err == nil { + totalCount = GetLastTotalRowCountTx(txDB) } var ( accessUUidList []string @@ -185,11 +185,11 @@ func GetImMessageRecord(db *DaoDB, groupID int, userID, toUserID string, storeID LIMIT ? OFFSET ? ` sqlParams = append(sqlParams, pageSize, offset) - Begin(db) - defer Commit(db) - if err = GetRows(db, &msg, sql, sqlParams); err == nil { + txDB, _ := Begin(db) + defer Commit(db, txDB) + if err = GetRowsTx(txDB, &msg, sql, sqlParams); err == nil { pagedInfo = &model.PagedInfo{ - TotalCount: GetLastTotalRowCount(db), + TotalCount: GetLastTotalRowCountTx(txDB), // Data: msg, } for _, v := range msg { diff --git a/controllers/job_controller.go b/controllers/job_controller.go index c4fcf4cad..f7d4ec042 100644 --- a/controllers/job_controller.go +++ b/controllers/job_controller.go @@ -570,12 +570,13 @@ func (c *JobController) GetUnionActList() { // @Description 分享联盟链接 // @Param token header string true "认证token" // @Param jobID formData int true "任务ID" +// @Param linkType formData int true "链接类型,1为小程序,2为H5" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /ShareUnionLink [post] func (c *JobController) ShareUnionLink() { c.callShareUnionLink(func(params *tJobShareUnionLinkParams) (retVal interface{}, errCode string, err error) { - retVal, err = cms.ShareUnionLink(params.Ctx, 1, 1) + retVal, err = cms.ShareUnionLink(params.Ctx, params.JobID, params.LinkType) return retVal, "", err }) }