This commit is contained in:
苏尹岚
2021-04-20 09:33:30 +08:00
parent 14f7fc7828
commit a75ed0f33c
18 changed files with 473 additions and 459 deletions

View File

@@ -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)

View File

@@ -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
}

View File

@@ -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,
}
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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) {

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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

View File

@@ -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
}

View File

@@ -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,
}
}

View File

@@ -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 {

View File

@@ -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

View File

@@ -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)
}

View File

@@ -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
}

View File

@@ -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 {

View File

@@ -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
})
}