diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 0b7a3b233..d5b2edd2d 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -839,10 +839,7 @@ func UpdateStoreSkus(ctx *jxcontext.Context, causeFlag, storeID int, skuBindInfo func UpdateStoresSkus(ctx *jxcontext.Context, causeFlag int, storeIDs []int, skuBindInfos []*StoreSkuBindInfo, isScale, isAsync, isContinueWhenError bool) (hint string, err error) { globals.SugarLogger.Debugf("UpdateStoresSkus:%s, storeIDs:%v, skuBindInfos:%s", ctx.GetTrackInfo(), storeIDs, utils.Format4Output(skuBindInfos, true)) - var flag = false - if ctx.GetLoginType() == weixin.AuthTypeMP || ctx.GetLoginType() == weixin.AuthTypeMini { - flag, err = doStoreSkuAudit(ctx, storeIDs, skuBindInfos) - } + flag, err := doStoreSkuAudit(ctx, storeIDs, skuBindInfos) if !flag { var num int64 db := dao.GetDB() @@ -983,7 +980,6 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs // if err = checkStoresSkusSaleCity(ctx, db, storeIDs, skuBindInfos); err != nil { // return nil, err // } - filterStoreSkuAudit(ctx, storeIDs, skuBindInfos) // globals.SugarLogger.Debugf("updateStoresSkusWithoutSync2, storeIDs:%v, skuBindInfos:%s", storeIDs, utils.Format4Output(skuBindInfos, false)) isUserCanDirectChangePrice := true if user := ctx.GetFullUser(); user != nil { @@ -4458,46 +4454,97 @@ func doStoreSkuAudit(ctx *jxcontext.Context, storeIDs []int, skuBindInfos []*Sto db := dao.GetDB() for _, storeID := range storeIDs { for _, skuBindInfo := range skuBindInfos { + storeAudits, err := dao.GetStoreSkuAuditLight(db, []int{storeID}, []int{skuBindInfo.NameID}, model.StoreAuditStatusOnline) + //关注,可售排除 if skuBindInfo.IsFocus != 0 || skuBindInfo.IsSale != 0 || skuBindInfo.UnitPrice == 0 { globals.SugarLogger.Debugf("doStoreSkuAudit return1 storeID : %v nameID: %v", storeID, skuBindInfo.NameID) return false, err } + //运营排除 if (ctx.GetFullUser().Type & model.UserTypeOperator) != 0 { + if len(storeAudits) > 0 { + dao.DeleteEntityLogically(db, storeAudits[0], nil, ctx.GetUserName(), nil) + } + globals.SugarLogger.Debugf("doStoreSkuAudit return2 storeID : %v nameID: %v", storeID, skuBindInfo.NameID) + return false, err + } + if ctx.GetLoginType() != weixin.AuthTypeMP && ctx.GetLoginType() != weixin.AuthTypeMini { globals.SugarLogger.Debugf("doStoreSkuAudit return3 storeID : %v nameID: %v", storeID, skuBindInfo.NameID) return false, err } - dao.Begin(db) - defer dao.Rollback(db) - storeSkuAudit := model.StoreSkuAudit{ - StoreID: storeID, - Type: model.StoreSkuAuditTypePrice, - NameID: skuBindInfo.NameID, - Status: model.StoreAuditStatusOnline, - UserID: ctx.GetUserID(), - UnitPrice: skuBindInfo.UnitPrice, - } - dao.WrapAddIDCULEntity(storeSkuAudit, ctx.GetUserName()) - storeSkus, err2 := dao.GetStoreSkusByNameIDs(db, []int{storeID}, skuBindInfo.NameID) - err = err2 + //如果改的价比原价低排除 + storeSkus, err := dao.GetStoreSkusByNameIDs(db, []int{storeID}, skuBindInfo.NameID) if len(storeSkus) > 0 { if skuBindInfo.UnitPrice <= int(storeSkus[0].UnitPrice) { - globals.SugarLogger.Debugf("doStoreSkuAudit return2 storeID : %v nameID: %v", storeID, skuBindInfo.NameID) + if len(storeAudits) > 0 { + dao.DeleteEntityLogically(db, storeAudits[0], nil, ctx.GetUserName(), nil) + } + globals.SugarLogger.Debugf("doStoreSkuAudit return4 storeID : %v nameID: %v", storeID, skuBindInfo.NameID) return false, err + } else { + if len(storeAudits) > 0 { + dao.DeleteEntityLogically(db, storeAudits[0], nil, ctx.GetUserName(), nil) + } } - storeSkuAudit.OriginUnitPrice = int(storeSkus[0].UnitPrice) + } else { + return false, fmt.Errorf("未查询到该门店商品价,storeID: %v, nameID: %V", storeID, skuBindInfo.NameID) } + storeSkuAudit := model.StoreSkuAudit{ + StoreID: storeID, + Type: model.StoreSkuAuditTypePrice, + NameID: skuBindInfo.NameID, + Status: model.StoreAuditStatusOnline, + UnitPrice: skuBindInfo.UnitPrice, + OriginUnitPrice: int(storeSkus[0].UnitPrice), + } + dao.WrapAddIDCULEntity(storeSkuAudit, ctx.GetUserName()) err = dao.CreateEntity(db, storeSkuAudit) } - dao.Commit(db) } return isAudit, err } -func filterStoreSkuAudit(ctx *jxcontext.Context, storeIDs []int, skuBindInfos []*StoreSkuBindInfo) (err error) { - - return err -} - -func StoreSkuPriceAudit(ctx *jxcontext.Context) (err error) { - return err +func StoreSkuPriceAudit(ctx *jxcontext.Context, storeIDs, nameIDs []int, status int, isAsync, isContinueWhenError bool) (hint string, err error) { + db := dao.GetDB() + if status == model.StoreAuditStatusOnline { + return "", fmt.Errorf("审核标志不正确!") + } + task := tasksch.NewParallelTask("StoreSkuPriceAudit", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + storeID := batchItemList[0].(int) + for _, v := range nameIDs { + storeAudits, err := dao.GetStoreSkuAuditLight(db, []int{storeID}, []int{v}, model.StoreAuditStatusOnline) + if len(storeAudits) == 0 || err != nil { + return retVal, fmt.Errorf("未查询到该门店该商品的待审核信息!storeID: %v, nameID: %v", storeID, v) + } + //审核通过 + if status == model.StoreAuditStatusCreated { + storeAudits[0].UserID = ctx.GetUserID() + storeAudits[0].Status = model.StoreAuditStatusCreated + _, err = dao.UpdateEntity(db, storeAudits[0], "UserID", "Status") + var skuBindInfos = []*StoreSkuBindInfo{ + &StoreSkuBindInfo{ + NameID: v, + UnitPrice: storeAudits[0].UnitPrice, + }, + } + _, err = UpdateStoresSkus(ctx, 0, []int{storeID}, skuBindInfos, false, false, true) + } else if status == model.StoreAuditStatusRejected { + storeAudits[0].UserID = ctx.GetUserID() + storeAudits[0].Status = model.StoreAuditStatusRejected + _, err = dao.UpdateEntity(db, storeAudits[0], "UserID", "Status") + } else { + return retVal, fmt.Errorf("审核标志不正确!") + } + } + return retVal, err + }, storeIDs) + tasksch.HandleTask(task, nil, true).Run() + if isAsync { + hint = task.GetID() + } else { + _, err = task.GetResult(0) + hint = "1" + } + return hint, err } diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index f6f0da5ea..35866d1a5 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -1585,3 +1585,26 @@ func GetStoreSkuAudit(db *DaoDB, storeIDs, nameIDs, skuIDs []int, status int, na } return pagedInfo, err } + +func GetStoreSkuAuditLight(db *DaoDB, storeIDs, nameIDs []int, status int) (storeSkuAudit []*model.StoreSkuAudit, err error) { + sql := ` + SELECT a.* + FROM store_sku_audit a + WHERE a.deleted_at = ? + ` + sqlParams := []interface{}{utils.DefaultTimeValue} + if len(storeIDs) > 0 { + sql += " AND a.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")" + sqlParams = append(sqlParams, storeIDs) + } + if len(nameIDs) > 0 { + sql += " AND a.name_id IN (" + GenQuestionMarks(len(nameIDs)) + ")" + sqlParams = append(sqlParams, nameIDs) + } + if status != model.StoreAuditStatusAll { + sql += " AND a.status = ? " + sqlParams = append(sqlParams, status) + } + err = GetRows(db, &storeSkuAudit, sql, sqlParams...) + return storeSkuAudit, err +}