diff --git a/business/auth2/auth2.go b/business/auth2/auth2.go index b34c181c6..06d5304ad 100644 --- a/business/auth2/auth2.go +++ b/business/auth2/auth2.go @@ -203,7 +203,7 @@ func Login(authType, authID, authIDType, authSecret string) (authInfo *AuthInfo, realAuthID = user.GetID() } if authBindEx, err = handler.VerifySecret(realAuthID, authSecret); err == nil { - globals.SugarLogger.Debugf("auth2 Login authBindEx:%s", utils.Format4Output(authBindEx, false)) + // globals.SugarLogger.Debugf("auth2 Login authBindEx:%s", utils.Format4Output(authBindEx, false)) if authBindEx == nil { // mobile, email会返回nil(表示不会新建AuthBind实体) user = userProvider.GetUser(authID, authIDType) authBindEx = &AuthBindEx{ @@ -258,8 +258,8 @@ func BindUser(inauthInfo *AuthInfo, user IUser) (outauthInfo *AuthInfo, err erro } // 添加新绑定 -func AddAuthBind(authInfo *AuthInfo, newAuthInfo *AuthInfo) (err error) { - if authInfo == nil || newAuthInfo == nil { +func AddAuthBind(user IUser, newAuthInfo *AuthInfo) (err error) { + if user == nil || newAuthInfo == nil { return ErrInternalErrror } if !newAuthInfo.IsUserEmpty() { @@ -267,12 +267,12 @@ func AddAuthBind(authInfo *AuthInfo, newAuthInfo *AuthInfo) (err error) { } RemoveUserInfo(newAuthInfo.Token) if newAuthInfo.AuthBindInfo.Type == AuthTypeMobile { - err = userProvider.UpdateUserMobile(authInfo.GetID(), newAuthInfo.AuthBindInfo.AuthID) + err = userProvider.UpdateUserMobile(user.GetID(), newAuthInfo.AuthBindInfo.AuthID) } else if newAuthInfo.AuthBindInfo.Type == AuthTypeEmail { - err = userProvider.UpdateUserEmail(authInfo.GetID(), newAuthInfo.AuthBindInfo.AuthID) + err = userProvider.UpdateUserEmail(user.GetID(), newAuthInfo.AuthBindInfo.AuthID) } else { - newAuthInfo.AuthBindInfo.UserID = authInfo.GetID() - err = authers[newAuthInfo.AuthBindInfo.Type].AddAuthBind(newAuthInfo.AuthBindInfo, authInfo.GetName()) + newAuthInfo.AuthBindInfo.UserID = user.GetID() + err = authers[newAuthInfo.AuthBindInfo.Type].AddAuthBind(newAuthInfo.AuthBindInfo, user.GetName()) } return err } diff --git a/business/auth2/authprovider/weixin/weixin.go b/business/auth2/authprovider/weixin/weixin.go index 59432a97b..0786e86ed 100644 --- a/business/auth2/authprovider/weixin/weixin.go +++ b/business/auth2/authprovider/weixin/weixin.go @@ -48,7 +48,7 @@ func (a *Auther) VerifySecret(state, code string) (authBindEx *auth2.AuthBindEx, if err = err2; err == nil { wxUserinfo, err2 := api.WeixinPageAPI.SNSGetUserInfo(token.AccessToken, token.OpenID) if err = err2; err == nil { - if authBindEx, err = a.UnionFindAuthBind(a.authType, []string{AuthTypeWeixin, AuthTypeMini, AuthTypeMini}, wxUserinfo.OpenID, wxUserinfo.UnionID, wxUserinfo); err == nil { + if authBindEx, err = a.UnionFindAuthBind(a.authType, []string{AuthTypeWeixin, AuthTypeMP, AuthTypeMini}, wxUserinfo.OpenID, wxUserinfo.UnionID, wxUserinfo); err == nil { authBindEx.UserHint = &auth2.UserBasic{ Name: wxUserinfo.NickName, } diff --git a/business/auth2/authprovider/weixin/weixin_mini.go b/business/auth2/authprovider/weixin/weixin_mini.go index 3d8879c14..d99e19e15 100644 --- a/business/auth2/authprovider/weixin/weixin_mini.go +++ b/business/auth2/authprovider/weixin/weixin_mini.go @@ -34,7 +34,7 @@ func (a *MiniAuther) VerifySecret(dummy, jsCode string) (authBindEx *auth2.AuthB if err == nil { sessionKey := sessionInfo.SessionKey sessionInfo.SessionKey = "" - if authBindEx, err = a.UnionFindAuthBind(AuthTypeMini, []string{AuthTypeWeixin, AuthTypeMini, AuthTypeMini}, sessionInfo.OpenID, sessionInfo.UnionID, sessionInfo); err == nil { + if authBindEx, err = a.UnionFindAuthBind(AuthTypeMini, []string{AuthTypeWeixin, AuthTypeMP, AuthTypeMini}, sessionInfo.OpenID, sessionInfo.UnionID, sessionInfo); err == nil { authBindEx.UserData = sessionKey } } diff --git a/business/authz/authz.go b/business/authz/authz.go new file mode 100644 index 000000000..67ecb00a0 --- /dev/null +++ b/business/authz/authz.go @@ -0,0 +1,10 @@ +package authz + +type IAuthz interface { + AddStoreRole4User(userID string, storeID int) (err error) + DelStoreRole4User(userID string, storeID int) (err error) + AddRole4User(userID, roleName string) (err error) + DelRole4User(userID, roleName string) (err error) + GetUserRoleList(userID string) (roleList []string, err error) + GetRoleUserList(roleName string) (userIDList []string, err error) +} diff --git a/business/authz/authz_utils.go b/business/authz/authz_utils.go new file mode 100644 index 000000000..dcc47c1d6 --- /dev/null +++ b/business/authz/authz_utils.go @@ -0,0 +1,29 @@ +package authz + +import ( + "strings" + + "git.rosy.net.cn/baseapi/utils" +) + +const ( + RoleNameSep = "/" + RolePrefix = "role" + StoreRolePrefix = "store" +) + +func GenStoreRoleName(storeID int) (roleName string) { + return strings.Join([]string{ + RolePrefix, + StoreRolePrefix, + utils.Int2Str(storeID), + }, RoleNameSep) +} + +func GetStoreIDFromRole(roleName string) (storeID int) { + list := strings.Split(roleName, RoleNameSep) + if len(list) == 3 { + storeID = int(utils.Str2Int64WithDefault(list[2], 0)) + } + return storeID +} diff --git a/business/authz/casbinauth/adapter.go b/business/authz/casbinauth/adapter.go new file mode 100644 index 000000000..7598e8c08 --- /dev/null +++ b/business/authz/casbinauth/adapter.go @@ -0,0 +1,185 @@ +package casbinauth + +import ( + "git.rosy.net.cn/jx-callback/globals" + "github.com/astaxie/beego/orm" + "github.com/casbin/casbin/model" + "github.com/casbin/casbin/persist" +) + +type CasbinRule struct { + ID int `orm:"column(id)" json:"id"` + PType string + V0 string + V1 string + V2 string + V3 string + V4 string + V5 string +} + +type Adapter struct { +} + +func RegisterModel() { + orm.RegisterModel(new(CasbinRule)) +} + +// finalizer is the destructor for Adapter. +func finalizer(a *Adapter) { +} + +func NewAdapter() *Adapter { + return &Adapter{} +} + +func loadPolicyLine(line CasbinRule, model model.Model) { + lineText := line.PType + if line.V0 != "" { + lineText += ", " + line.V0 + } + if line.V1 != "" { + lineText += ", " + line.V1 + } + if line.V2 != "" { + lineText += ", " + line.V2 + } + if line.V3 != "" { + lineText += ", " + line.V3 + } + if line.V4 != "" { + lineText += ", " + line.V4 + } + if line.V5 != "" { + lineText += ", " + line.V5 + } + + persist.LoadPolicyLine(lineText, model) +} + +func (a *Adapter) LoadPolicy(model model.Model) error { + var lines []CasbinRule + o := orm.NewOrm() + _, err := o.QueryTable("casbin_rule").Limit(-1).All(&lines) + if err != nil { + return err + } + + for _, line := range lines { + loadPolicyLine(line, model) + } + return nil +} + +func savePolicyLine(ptype string, rule []string) CasbinRule { + line := CasbinRule{} + + line.PType = ptype + if len(rule) > 0 { + line.V0 = rule[0] + } + if len(rule) > 1 { + line.V1 = rule[1] + } + if len(rule) > 2 { + line.V2 = rule[2] + } + if len(rule) > 3 { + line.V3 = rule[3] + } + if len(rule) > 4 { + line.V4 = rule[4] + } + if len(rule) > 5 { + line.V5 = rule[5] + } + + return line +} + +func (a *Adapter) clearAll(o orm.Ormer) (err error) { + _, err = o.Raw(` + DELETE t1 + FROM casbin_rule t1 + `).Exec() + return err +} + +// SavePolicy saves policy to database. +func (a *Adapter) SavePolicy(model model.Model) error { + globals.SugarLogger.Debugf("SavePolicy") + o := orm.NewOrm() + + a.clearAll(o) + var lines []CasbinRule + + for ptype, ast := range model["p"] { + for _, rule := range ast.Policy { + line := savePolicyLine(ptype, rule) + lines = append(lines, line) + } + } + + for ptype, ast := range model["g"] { + for _, rule := range ast.Policy { + line := savePolicyLine(ptype, rule) + lines = append(lines, line) + } + } + + _, err := o.InsertMulti(len(lines), lines) + return err +} + +// AddPolicy adds a policy rule to the storage. +func (a *Adapter) AddPolicy(sec string, ptype string, rule []string) error { + o := orm.NewOrm() + line := savePolicyLine(ptype, rule) + _, err := o.Insert(&line) + return err +} + +// RemovePolicy removes a policy rule from the storage. +func (a *Adapter) RemovePolicy(sec string, ptype string, rule []string) error { + o := orm.NewOrm() + line := savePolicyLine(ptype, rule) + _, err := o.Delete(&line, "p_type", "v0", "v1", "v2", "v3", "v4", "v5") + return err +} + +// RemoveFilteredPolicy removes policy rules that match the filter from the storage. +func (a *Adapter) RemoveFilteredPolicy(sec string, ptype string, fieldIndex int, fieldValues ...string) error { + line := CasbinRule{} + + line.PType = ptype + filter := []string{} + filter = append(filter, "p_type") + if fieldIndex <= 0 && 0 < fieldIndex+len(fieldValues) { + line.V0 = fieldValues[0-fieldIndex] + filter = append(filter, "v0") + } + if fieldIndex <= 1 && 1 < fieldIndex+len(fieldValues) { + line.V1 = fieldValues[1-fieldIndex] + filter = append(filter, "v1") + } + if fieldIndex <= 2 && 2 < fieldIndex+len(fieldValues) { + line.V2 = fieldValues[2-fieldIndex] + filter = append(filter, "v2") + } + if fieldIndex <= 3 && 3 < fieldIndex+len(fieldValues) { + line.V3 = fieldValues[3-fieldIndex] + filter = append(filter, "v3") + } + if fieldIndex <= 4 && 4 < fieldIndex+len(fieldValues) { + line.V4 = fieldValues[4-fieldIndex] + filter = append(filter, "v4") + } + if fieldIndex <= 5 && 5 < fieldIndex+len(fieldValues) { + line.V5 = fieldValues[5-fieldIndex] + filter = append(filter, "v5") + } + + o := orm.NewOrm() + _, err := o.Delete(&line, filter...) + return err +} diff --git a/business/authz/casbinauth/casbinauth.go b/business/authz/casbinauth/casbinauth.go new file mode 100644 index 000000000..394d9fd34 --- /dev/null +++ b/business/authz/casbinauth/casbinauth.go @@ -0,0 +1,44 @@ +package casbinauth + +import ( + "git.rosy.net.cn/jx-callback/business/authz" + "github.com/casbin/casbin" +) + +type CasbinAuthz struct { + enforcer *casbin.SyncedEnforcer +} + +func New(modelFile string) (authObj authz.IAuthz, err error) { + obj := &CasbinAuthz{} + obj.enforcer, err = casbin.NewSyncedEnforcer(modelFile, NewAdapter()) + return obj, err +} + +func (c *CasbinAuthz) AddStoreRole4User(userID string, storeID int) (err error) { + return c.AddRole4User(userID, authz.GenStoreRoleName(storeID)) +} + +func (c *CasbinAuthz) DelStoreRole4User(userID string, storeID int) (err error) { + return c.DelRole4User(userID, authz.GenStoreRoleName(storeID)) +} + +func (c *CasbinAuthz) AddRole4User(userID, roleName string) (err error) { + _, err = c.enforcer.AddRoleForUser(userID, roleName) + return err +} + +func (c *CasbinAuthz) DelRole4User(userID, roleName string) (err error) { + _, err = c.enforcer.DeleteRoleForUser(userID, roleName) + return err +} + +func (c *CasbinAuthz) GetUserRoleList(userID string) (roleList []string, err error) { + roleList, err = c.enforcer.GetRolesForUser(userID) + return roleList, err +} + +func (c *CasbinAuthz) GetRoleUserList(roleName string) (userIDList []string, err error) { + userIDList, err = c.enforcer.GetUsersForRole(roleName) + return userIDList, err +} diff --git a/business/authz/casbinauth/rbac_model.conf b/business/authz/casbinauth/rbac_model.conf new file mode 100644 index 000000000..71159e387 --- /dev/null +++ b/business/authz/casbinauth/rbac_model.conf @@ -0,0 +1,14 @@ +[request_definition] +r = sub, obj, act + +[policy_definition] +p = sub, obj, act + +[role_definition] +g = _, _ + +[policy_effect] +e = some(where (p.eft == allow)) + +[matchers] +m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act \ No newline at end of file diff --git a/business/jxstore/cms/authz.go b/business/jxstore/cms/authz.go new file mode 100644 index 000000000..5d61e8755 --- /dev/null +++ b/business/jxstore/cms/authz.go @@ -0,0 +1,97 @@ +package cms + +import ( + "git.rosy.net.cn/jx-callback/business/auth2" + "git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin" + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/business/model/dao" + "git.rosy.net.cn/jx-callback/business/model/legacymodel" + "git.rosy.net.cn/jx-callback/globals/api2" +) + +func TransferLegacyWeixins() (err error) { + const remark4Transfer = "transfer" + // DELETE t1 + // FROM auth_bind t1 + // WHERE t1.remark = 'transfer'; + + // DELETE t1 + // FROM user t1 + // WHERE t1.remark = 'transfer'; + + // TRUNCATE TABLE casbin_rule; + + sql := ` + SELECT * + FROM weixins + ORDER BY parentid` + var weixinList []*legacymodel.WeiXins + db := dao.GetDB() + err = dao.GetRows(db, &weixinList, sql) + if err != nil { + return err + } + parentMap := make(map[int]*legacymodel.WeiXins) + for _, v := range weixinList { + if v.ParentID == -1 { + parentMap[v.ID] = v + } else { + if parentMap[v.ParentID] != nil { + v.JxStoreID = parentMap[v.ParentID].JxStoreID + } + } + if v.Tel != "" { + user := &model.User{ + UserID2: v.Tel, + Name: v.NickName, + Mobile: v.Tel, + Type: model.UserTypeStoreBoss, + Remark: remark4Transfer, + } + if user.Name == "" { + user.Name = user.Mobile + } + userList, err2 := dao.GetUsers(db, 0, "", nil, "", v.Tel) + if err = err2; err != nil { + return err + } + // globals.SugarLogger.Debug(utils.Format4Output(user, false)) + if len(userList) == 0 { + err = CreateUser(user, v.LastOperator) + } else { + user = userList[0] + } + if err != nil { + return err + } + if v.OpenID != "" { + auth2.AddAuthBind(user, &auth2.AuthInfo{ + AuthBindInfo: &auth2.AuthBindEx{ + AuthBind: model.AuthBind{ + Type: weixin.AuthTypeMP, + AuthID: v.OpenID, + AuthID2: v.OpenIDUnion, + Remark: remark4Transfer, + }, + }, + }) + } + if v.OpenIDMini != "" { + auth2.AddAuthBind(user, &auth2.AuthInfo{ + AuthBindInfo: &auth2.AuthBindEx{ + AuthBind: model.AuthBind{ + Type: weixin.AuthTypeMini, + AuthID: v.OpenIDMini, + AuthID2: v.OpenIDUnion, + Remark: remark4Transfer, + }, + }, + }) + } + if v.JxStoreID > 0 { + api2.RoleMan.AddStoreRole4User(user.GetID(), v.JxStoreID) + } + } + } + return err +} diff --git a/business/jxstore/cms/authz_test.go b/business/jxstore/cms/authz_test.go new file mode 100644 index 000000000..c0f7271e1 --- /dev/null +++ b/business/jxstore/cms/authz_test.go @@ -0,0 +1,29 @@ +package cms + +import ( + "testing" + + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/globals/api2" + + _ "git.rosy.net.cn/jx-callback/business/partner/purchase/ebai" + _ "git.rosy.net.cn/jx-callback/business/partner/purchase/elm" + _ "git.rosy.net.cn/jx-callback/business/partner/purchase/jd" + _ "git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm" + _ "git.rosy.net.cn/jx-callback/business/partner/purchase/weimob/wsc" +) + +func TestTransferLegacyWeixins(t *testing.T) { + err := TransferLegacyWeixins() + if err != nil { + t.Fatal(err) + } +} + +func TestCasbin(t *testing.T) { + userList, err := api2.RoleMan.GetRoleUserList("role/store/100324") + t.Log(utils.Format4Output(userList, false)) + if err != nil { + t.Fatal(err) + } +} diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 0fdfc558a..06a31c268 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -18,7 +18,6 @@ import ( "git.rosy.net.cn/jx-callback/business/jxutils/excel" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/msg" - "git.rosy.net.cn/jx-callback/business/jxutils/netprinter" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" @@ -521,7 +520,7 @@ func checkCreateStore(store *model.Store) (err error) { } func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interface{}, userName string) (num int64, err error) { - globals.SugarLogger.Debugf("UpdateStore storeID:%d, payload:%s", storeID, utils.Format4Output(payload, false)) + globals.SugarLogger.Debugf("UpdateStore storeID:%d, payload:%s", storeID, utils.Format4Output(payload, true)) if err = checkBankBranch(utils.Interface2String(payload["payeeBankBranchName"])); err != nil { return 0, err } @@ -544,27 +543,23 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa store.Name = valid["name"].(string) syncStatus |= model.SyncFlagStoreName } + globals.SugarLogger.Debug(utils.Format4Output(valid, false)) // 网络打印机处理 if valid["printerVendorID"] != nil || valid["printerSN"] != nil || valid["printerKey"] != nil { - if handler := partner.GetPrinterPlatformFromVendorID(store.PrinterVendorID); handler != nil { - handler.UnregisterPrinter(ctx, store.PrinterSN, store.PrinterKey) - } if valid["printerVendorID"] == nil { valid["printerVendorID"] = store.PrinterVendorID - } else { - store.PrinterVendorID = int(utils.Interface2Int64WithDefault(valid["printerVendorID"], 0)) } - if store.PrinterVendorID > 0 { + if printerVendorID := int(utils.Interface2Int64WithDefault(valid["printerVendorID"], 0)); printerVendorID > 0 { + handler := partner.GetPrinterPlatformFromVendorID(printerVendorID) + if handler == nil { + return 0, fmt.Errorf("不支持的打印机厂商ID:%d", printerVendorID) + } if valid["printerSN"] == nil { valid["printerSN"] = store.PrinterSN } if valid["printerKey"] == nil { valid["printerKey"] = store.PrinterKey } - var handler partner.IPrinterHandler - if handler, err = netprinter.GetHandlerFromStore(store); err != nil { - return 0, err - } newID1, newID2, err2 := handler.RegisterPrinter(ctx, valid["printerSN"].(string), valid["printerKey"].(string), store.Name) if err = err2; err != nil { return 0, err @@ -576,8 +571,14 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa if newID2 != "" { valid["printerKey"] = newID2 } - - valid["printerBindInfo"] = "" + } else { + valid["printerVendorID"] = 0 + valid["printerSN"] = "" + valid["printerKey"] = "" + } + valid["printerBindInfo"] = "" + if handler := partner.GetPrinterPlatformFromVendorID(store.PrinterVendorID); handler != nil { + handler.UnregisterPrinter(ctx, store.PrinterSN, store.PrinterKey) } } @@ -614,7 +615,7 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa // } // valid["districtCode"] = api.AutonaviAPI.GetCoordinateDistrictCode(lng, lat) // } - globals.SugarLogger.Debugf("UpdateStore track:%s, valid:%s", ctx.GetTrackInfo(), utils.Format4Output(valid, true)) + globals.SugarLogger.Debugf("UpdateStore track:%s, storeID:%d, valid:%s", ctx.GetTrackInfo(), storeID, utils.Format4Output(valid, true)) if len(valid) > 0 { dao.Begin(db) defer func() { @@ -708,10 +709,9 @@ func CreateStore(ctx *jxcontext.Context, storeExt *StoreExt, userName string) (i store.Name = jxutils.FormalizeName(store.Name) store.DeliveryRange = strings.Trim(store.DeliveryRange, ";") if store.PrinterSN != "" { - var handler partner.IPrinterHandler - handler, err = netprinter.GetHandlerFromStore(store) - if err != nil { - return 0, err + handler := partner.GetPrinterPlatformFromVendorID(store.PrinterVendorID) + if handler == nil { + return 0, fmt.Errorf("不支持的打印机厂商ID:%d", store.PrinterVendorID) } newID1, newID2, err2 := handler.RegisterPrinter(ctx, store.PrinterSN, store.PrinterKey, store.Name) if err = err2; err != nil { diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index d2a3cad9f..d30197e63 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -41,7 +41,7 @@ type StoreSkuExt struct { SkuSpecQuality float32 `json:"specQuality"` SkuSpecUnit string `orm:"size(8)" json:"specUnit"` // 质量或容量 Weight int `json:"weight"` // 重量/质量,单位为克,当相应的SkuName的SpecUnit为g或kg时,必须等于SpecQuality - JdID int64 `orm:"column(sku_jd_id);null;index" json:"jdID"` + JdID string `orm:"column(sku_jd_id);null;index" json:"jdID"` SkuStatus int `json:"status"` BindCreatedAt time.Time `orm:"auto_now_add;type(datetime)" json:"createdAt"` @@ -53,10 +53,10 @@ type StoreSkuExt struct { UnitPrice int `json:"unitPrice"` // 这个是一斤的门店商品价,放在这里的原因是避免额外增加一张store sku_name表,逻辑上要保证同一SKU NAME中的所有SKU这个字段的数据一致 StoreSkuStatus int `json:"storeSkuStatus"` - EbaiID int64 `orm:"column(ebai_id);index" json:"ebaiID"` - MtwmID int64 `orm:"column(mtwm_id)" json:"mtwmID"` // 这个也不是必须的,只是为了DAO取数据语句一致 - WscID int64 `orm:"column(wsc_id);index" json:"wscID"` // 表示微盟skuId - WscID2 int64 `orm:"column(wsc_id2);index" json:"wscID2"` // 表示微盟goodsId + EbaiID string `orm:"column(ebai_id);index" json:"ebaiID"` + MtwmID string `orm:"column(mtwm_id)" json:"mtwmID"` // 这个也不是必须的,只是为了DAO取数据语句一致 + WscID string `orm:"column(wsc_id);index" json:"wscID"` // 表示微盟skuId + WscID2 string `orm:"column(wsc_id2);index" json:"wscID2"` // 表示微盟goodsId JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"` @@ -503,20 +503,16 @@ func updateActPrice4StoreSkuNameNew(db *dao.DaoDB, storeIDs, skuIDs []int, skuNa globals.SugarLogger.Errorf("updateActPrice4StoreSkuNameNew can not get sku promotion info for error:%v", err) return err } - actStoreSkuMap := jxutils.NewActStoreSkuMap(actStoreSkuList, true) + actStoreSkuMap4Act := jxutils.NewActStoreSkuMap(actStoreSkuList, true) + actStoreSkuMap4EarningPrice := jxutils.NewActStoreSkuMap(actStoreSkuList, false) for _, skuName := range skuNamesInfo.SkuNames { if len(skuName.Skus2) > 0 { for _, v := range skuName.Skus2 { - actStoreSku := actStoreSkuMap.GetActStoreSku(skuName.StoreID, v.SkuID, -1) - if actStoreSku != nil { + if actStoreSku := actStoreSkuMap4Act.GetActStoreSku(skuName.StoreID, v.SkuID, -1); actStoreSku != nil { v.ActPrice = int(actStoreSku.ActualActPrice) } - // index := dao.GenSkuPriceMapKey(skuName.StoreID, v.SkuID) - // if jxSkuPriceMap[index] != nil { - // v.EarningPrice = jxSkuPriceMap[index].EarningPrice - // } else - if actStoreSku != nil { + if actStoreSku := actStoreSkuMap4EarningPrice.GetActStoreSku(skuName.StoreID, v.SkuID, -1); actStoreSku != nil { v.EarningPrice = int(actStoreSku.EarningPrice) } diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index ee73a7359..3428e9280 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -349,7 +349,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo switch step { case 0: if len(deleteList) > 0 { - _, err = putils.FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, err error) { + _, err = putils.FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { var successList []*partner.StoreSkuInfo if successList, err = singleStoreHandler.DeleteStoreSkus(ctx, storeID, vendorStoreID, batchedStoreSkuList); singleStoreHandler.IsErrSkuNotExist(err) { err = nil @@ -360,12 +360,12 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo if len(successList) > 0 { updateStoreSku(dao.GetDB(), vendorID, bareSku2Sync(successList), model.SyncFlagDeletedMask) } - return nil, err + return nil, len(successList), err }, ctx, task, deleteList, 1 /*singleStoreHandler.GetStoreSkusBatchSize(partner.FuncDeleteStoreSkus)*/, isContinueWhenError) } case 1: if len(createList) > 0 { - _, err = putils.FreeBatchStoreSkuSyncInfo(func(task tasksch.ITask, batchedStoreSkuList []*dao.StoreSkuSyncInfo) (result interface{}, err error) { + _, err = putils.FreeBatchStoreSkuSyncInfo(func(task tasksch.ITask, batchedStoreSkuList []*dao.StoreSkuSyncInfo) (result interface{}, successCount int, err error) { var successList []*dao.StoreSkuSyncInfo if successList, err = singleStoreHandler.CreateStoreSkus(ctx, storeID, vendorStoreID, batchedStoreSkuList); singleStoreHandler.IsErrSkuExist(err) { if skuNameList, err2 := singleStoreHandler.GetStoreSkusFullInfo(ctx, task, storeID, vendorStoreID, []*partner.StoreSkuInfo{ @@ -387,12 +387,12 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo if len(successList) > 0 { updateStoreSku(dao.GetDB(), vendorID, successList, model.SyncFlagNewMask) } - return nil, err + return nil, len(successList), err }, ctx, task, createList, 1 /*singleStoreHandler.GetStoreSkusBatchSize(partner.FuncCreateStoreSkus)*/, isContinueWhenError) } case 2: if len(updateList) > 0 { - _, err = putils.FreeBatchStoreSkuSyncInfo(func(task tasksch.ITask, batchedStoreSkuList []*dao.StoreSkuSyncInfo) (result interface{}, err error) { + _, err = putils.FreeBatchStoreSkuSyncInfo(func(task tasksch.ITask, batchedStoreSkuList []*dao.StoreSkuSyncInfo) (result interface{}, successCount int, err error) { var successList []*dao.StoreSkuSyncInfo if successList, err = singleStoreHandler.UpdateStoreSkus(ctx, storeID, vendorStoreID, batchedStoreSkuList); err == nil { successList = batchedStoreSkuList @@ -400,13 +400,13 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo if len(successList) > 0 { updateStoreSku(dao.GetDB(), vendorID, successList, model.SyncFlagModifiedMask) } - return nil, err + return nil, len(successList), err }, ctx, task, updateList, singleStoreHandler.GetStoreSkusBatchSize(partner.FuncUpdateStoreSkus), isContinueWhenError) } case 3: for k, list := range [][]*partner.StoreSkuInfo{stockList /*, onlineList*/} { if len(list) > 0 { - _, err = putils.FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, err error) { + _, err = putils.FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { var successList []*partner.StoreSkuInfo if successList, err = storeSkuHandler.UpdateStoreSkusStock(ctx, storeID, vendorStoreID, batchedStoreSkuList); err == nil { successList = batchedStoreSkuList @@ -414,7 +414,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo if k == 0 && len(successList) > 0 { updateStoreSku(dao.GetDB(), vendorID, bareSku2Sync(successList), model.SyncFlagModifiedMask) // ? } - return nil, err + return nil, len(successList), err }, ctx, task, list, storeSkuHandler.GetStoreSkusBatchSize(partner.FuncUpdateStoreSkusStock), isContinueWhenError) } } @@ -426,7 +426,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo status = model.SkuStatusDontSale } if len(statusList) > 0 { - _, err = putils.FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, err error) { + _, err = putils.FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { var successList []*partner.StoreSkuInfo if successList, err = storeSkuHandler.UpdateStoreSkusStatus(ctx, storeID, vendorStoreID, batchedStoreSkuList, status); err == nil { successList = batchedStoreSkuList @@ -434,12 +434,12 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo if len(successList) > 0 { updateStoreSku(dao.GetDB(), vendorID, bareSku2Sync(successList), model.SyncFlagSaleMask) } - return nil, err + return nil, len(successList), err }, ctx, task, statusList, storeSkuHandler.GetStoreSkusBatchSize(partner.FuncUpdateStoreSkusStatus), isContinueWhenError) } case 6: if len(priceList) > 0 { - _, err = putils.FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, err error) { + _, err = putils.FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { var successList []*partner.StoreSkuInfo if successList, err = storeSkuHandler.UpdateStoreSkusPrice(ctx, storeID, vendorStoreID, batchedStoreSkuList); err == nil { successList = batchedStoreSkuList @@ -447,7 +447,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo if len(successList) > 0 { updateStoreSku(dao.GetDB(), vendorID, bareSku2Sync(successList), model.SyncFlagPriceMask) } - return nil, err + return nil, len(successList), err }, ctx, task, priceList, storeSkuHandler.GetStoreSkusBatchSize(partner.FuncUpdateStoreSkusPrice), isContinueWhenError) } } @@ -490,9 +490,9 @@ func PruneMissingStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, ven } case 1: if len(sku2Delete) > 0 { - _, err = putils.FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, err error) { + _, err = putils.FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { _, err = handler.DeleteStoreSkus(ctx, storeID, vendorStoreID, sku2Delete) - return nil, err + return nil, 0, err }, ctx, parentTask, sku2Delete, handler.GetStoreSkusBatchSize(partner.FuncDeleteStoreSkus), isContinueWhenError) } } diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index 0bb557a2d..5695b7f4b 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -86,9 +86,9 @@ func RegisterUser(user *model.User, mobileVerifyCode string, inAuthInfo *auth2.A if inAuthInfo.AuthBindInfo.Type == dingding.AuthTypeStaff { user.Type |= model.UserTypeOperator } - if err = CreateUser(user); err == nil { + if err = CreateUser(user, "RegisterUser"); err == nil { if outAuthInfo, err = auth2.BindUser(mobileAuth, user); err == nil && inAuthInfo != nil { - err = auth2.AddAuthBind(outAuthInfo, inAuthInfo) + err = auth2.AddAuthBind(&outAuthInfo.UserBasic, inAuthInfo) } } else if dao.IsDuplicateError(err) { errCode = model.ErrCodeUserAlreadyExist @@ -109,11 +109,11 @@ func GetUserBindAuthInfo(ctx *jxcontext.Context) (authList []*model.AuthBind, er return nil, err } -func CreateUser(user *model.User) (err error) { +func CreateUser(user *model.User, creatorName string) (err error) { if user == nil || user.UserID2 == "" || user.Name == "" || user.Mobile == "" { return ErrUserIDAndNameMustGiven } - dao.WrapAddIDCULDEntity(user, "RegisterUser") + dao.WrapAddIDCULDEntity(user, creatorName) user.UserID = utils.GetUUID() user.Status = model.UserStatusNormal return dao.CreateEntity(nil, user) @@ -153,6 +153,6 @@ func OnDingDingMsg(msg map[string]interface{}) (callbackResponse *dingdingapi.Ca return api.DingDingAPI.Err2CallbackResponse(nil) } -func GetUsers(ctx *jxcontext.Context, userType int, userID2, mobile, userName string) (userList []*model.User, err error) { - return dao.GetUsers(dao.GetDB(), userType, userID2, mobile, userName) +func GetUsers(ctx *jxcontext.Context, userType int, keyword string, userIDs []string, userID2, mobile string) (userList []*model.User, err error) { + return dao.GetUsers(dao.GetDB(), userType, keyword, userIDs, userID2, mobile) } diff --git a/business/jxstore/misc/misc2.go b/business/jxstore/misc/misc2.go index 70ee7d69a..b55a57367 100644 --- a/business/jxstore/misc/misc2.go +++ b/business/jxstore/misc/misc2.go @@ -116,7 +116,7 @@ func StartOrEndOpStore(isStart bool, startTime, endTime int16, isAsync, isContin AddOrDelExtraStoreOptime(vendorID, storeID, vendorStoreID, &storeListValue.Store, startOpStoreTime, endOpStoreTime, false) } - _, err = putils.FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, err error) { + _, err = putils.FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { for _, skuValue := range batchedStoreSkuList { skuValue.Stock = GetStockValue(isStart) } @@ -125,7 +125,7 @@ func StartOrEndOpStore(isStart bool, startTime, endTime int16, isAsync, isContin //successList = batchedStoreSkuList //baseapi.SugarLogger.Debugf("StartOrEndOpStore successList:%v error:%v", successList, err) } - return nil, err + return nil, 0, err }, ctx, task, storeSkuList, singleStoreHandler.GetStoreSkusBatchSize(partner.FuncUpdateStoreSkusStock), true) if isStart { diff --git a/business/jxutils/netprinter/netprinter.go b/business/jxutils/netprinter/netprinter.go index c7ff1c8f4..9b0f1c182 100644 --- a/business/jxutils/netprinter/netprinter.go +++ b/business/jxutils/netprinter/netprinter.go @@ -57,11 +57,7 @@ func PrintOrderByOrder(ctx *jxcontext.Context, order *model.GoodsOrder) (printRe PrintResult: partner.PrintResultNoPrinter, }, nil } - if globals.EnableStoreWrite { - printResult, err = handler.PrintOrder(ctx, store, order) - } else { - err = fmt.Errorf("当前环境不支持打印") - } + printResult, err = handler.PrintOrder(ctx, store, order) if err == nil { dao.SetOrderPrintFlag(db, ctx.GetUserName(), order.VendorOrderID, order.VendorID, true) } diff --git a/business/jxutils/tasksch/parallel_task.go b/business/jxutils/tasksch/parallel_task.go index 067176391..e5e85c121 100644 --- a/business/jxutils/tasksch/parallel_task.go +++ b/business/jxutils/tasksch/parallel_task.go @@ -15,6 +15,7 @@ const ( ) type WorkFunc func(task *ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) +type WorkFunc2 func(task *ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, successCount int, err error) type ResultHandlerFunc func(taskName string, result []interface{}, err error) type ParallelConfig struct { @@ -28,7 +29,7 @@ type ParallelConfig struct { type ParallelTask struct { BaseTask - worker WorkFunc + worker WorkFunc2 jobList [][]interface{} taskChan chan []interface{} subFinishChan chan interface{} @@ -69,7 +70,7 @@ func (c *ParallelConfig) SetIsContinueWhenError(isContinueWhenError bool) *Paral // return c // } -func NewParallelTask(taskName string, config *ParallelConfig, ctx *jxcontext.Context, worker WorkFunc, itemList interface{}, params ...interface{}) *ParallelTask { +func NewParallelTask2(taskName string, config *ParallelConfig, ctx *jxcontext.Context, worker WorkFunc2, itemList interface{}, params ...interface{}) *ParallelTask { if config == nil { config = NewParallelConfig() } @@ -95,6 +96,14 @@ func NewParallelTask(taskName string, config *ParallelConfig, ctx *jxcontext.Con return task } +func NewParallelTask(taskName string, config *ParallelConfig, ctx *jxcontext.Context, worker WorkFunc, itemList interface{}, params ...interface{}) *ParallelTask { + return NewParallelTask2(taskName, config, ctx, + func(task *ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, successCount int, err error) { + retVal, err = worker(task, batchItemList, params...) + return retVal, 0, err + }, itemList, params...) +} + func (task *ParallelTask) Run() { task.run(func() { globals.SugarLogger.Debugf("ParallelTask.Run %s", task.Name) @@ -113,11 +122,11 @@ func (task *ParallelTask) Run() { chanRetVal = retVal goto end } else { - result, err := task.callWorker(func() (retVal interface{}, err error) { + result, successCount, err := task.callWorker2(func() (retVal interface{}, successCount int, err error) { return task.worker(task, job, task.params...) }) // globals.SugarLogger.Debugf("ParallelTask.Run %s, after call worker result:%v, err:%v", task.Name, result, err) - task.finishedOneJob(len(job), err) + task.finishedOneJob(len(job), successCount, err) if err != nil { // 出错 // globals.SugarLogger.Infof("ParallelTask.Run %s, subtask(job:%s, params:%s) result:%v, failed with error:%v", task.Name, utils.Format4Output(job, true), utils.Format4Output(task.params, true), result, err) if task.IsContinueWhenError { diff --git a/business/jxutils/tasksch/sequence_task.go b/business/jxutils/tasksch/sequence_task.go index f606d8ffe..38cab7cf8 100644 --- a/business/jxutils/tasksch/sequence_task.go +++ b/business/jxutils/tasksch/sequence_task.go @@ -40,7 +40,7 @@ func (task *SeqTask) Run() { result, err := task.callWorker(func() (retVal interface{}, err error) { return task.worker(task, i, task.params...) }) - task.finishedOneJob(1, err) + task.finishedOneJob(1, 0, err) if err != nil { // globals.SugarLogger.Infof("SeqTask.Run %s step:%d failed with error:%v", task.Name, i, err) if task.IsContinueWhenError { diff --git a/business/jxutils/tasksch/task.go b/business/jxutils/tasksch/task.go index d386e6caf..a364aa4fd 100644 --- a/business/jxutils/tasksch/task.go +++ b/business/jxutils/tasksch/task.go @@ -434,7 +434,8 @@ func (t *BaseTask) run(taskHandler func()) { } } -func (t *BaseTask) finishedOneJob(itemCount int, err error) { +// successCount表示在返回错误的情况下,(部分)成功的个数,如果没有返回错误,则successCount无意义 +func (t *BaseTask) finishedOneJob(itemCount, successCount int, err error) { t.locker.Lock() defer t.locker.Unlock() @@ -443,7 +444,8 @@ func (t *BaseTask) finishedOneJob(itemCount int, err error) { t.FinishedItemCount += itemCount t.FinishedJobCount++ } else { - t.FailedItemCount += itemCount + t.FinishedItemCount += successCount + t.FailedItemCount += itemCount - successCount t.FailedJobCount++ } } @@ -473,6 +475,15 @@ func (task *BaseTask) callWorker(worker func() (retVal interface{}, err error)) err = fmt.Errorf("panic, r:%v", r) } }() - retVal, err = worker() - return retVal, err + return worker() +} + +func (task *BaseTask) callWorker2(worker func() (retVal interface{}, successCount int, err error)) (retVal interface{}, successCount int, err error) { + defer func() { + if r := recover(); r != nil { + globals.SugarLogger.Errorf("callWorker panic:%v", r) + err = fmt.Errorf("panic, r:%v", r) + } + }() + return worker() } diff --git a/business/model/const.go b/business/model/const.go index 4e64f9b94..3776c5020 100644 --- a/business/model/const.go +++ b/business/model/const.go @@ -104,8 +104,8 @@ var ( OrderStatusUnknown: "一般事件", OrderStatusNew: "新订单", - OrderStatusAccepted: "已接单", - OrderStatusFinishedPickup: "已拣货", + OrderStatusAccepted: "待拣货", + OrderStatusFinishedPickup: "待配送", OrderStatusApplyFailedGetGoods: "取货失败待审核", OrderStatusAgreeFailedGetGoods: "取货失败", OrderStatusDelivering: "配送中", diff --git a/business/model/dao/act.go b/business/model/dao/act.go index bab9475de..47979fa30 100644 --- a/business/model/dao/act.go +++ b/business/model/dao/act.go @@ -330,10 +330,19 @@ func GetEffectiveActStoreSkuInfo(db *DaoDB, actID int, vendorIDs []int, storeIDs t3.actual_act_price, t3.sync_status, t3.vendor_price, t3.vendor_id FROM act t1 JOIN act_store_sku t2 ON t2.act_id = t1.id AND t2.deleted_at = ? - JOIN act_store_sku_map t3 ON t3.bind_id = t2.id AND t3.act_id = t1.id + JOIN act_store_sku_map t3 ON t3.bind_id = t2.id AND t3.act_id = t1.id AND (t3.sync_status & ? = 0 OR t1.type = ?) + JOIN act_map t4 ON t4.act_id = t1.id AND t4.vendor_id = t3.vendor_id AND t4.deleted_at = ? AND (t4.sync_status & ? = 0 OR t1.type = ?) WHERE t1.deleted_at = ? AND t1.status = ? AND NOT (t1.begin_at > ? OR t1.end_at < ?)` sqlParams := []interface{}{ utils.DefaultTimeValue, + + model.SyncFlagNewMask, + model.ActSkuFake, + + utils.DefaultTimeValue, + model.SyncFlagNewMask, + model.ActSkuFake, + utils.DefaultTimeValue, model.ActStatusCreated, endAt, diff --git a/business/model/dao/act_test.go b/business/model/dao/act_test.go index 20ac715bd..1acee0c34 100644 --- a/business/model/dao/act_test.go +++ b/business/model/dao/act_test.go @@ -5,7 +5,6 @@ import ( "time" "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/business/model" ) func TestGetEffectiveActStoreSkuInfo(t *testing.T) { @@ -21,32 +20,11 @@ func TestGetEffectiveActStoreSkuInfo(t *testing.T) { } for _, v := range []*testData{ &testData{ - ResultCount: 4, - FromTime: time.Now(), - ToTime: time.Now(), - }, - &testData{ - ResultCount: 0, - FromTime: time.Now().Add(-48 * time.Hour), - ToTime: time.Now().Add(-48 * time.Hour), - }, - &testData{ - ResultCount: 2, - StoreIDs: []int{100884}, - FromTime: time.Now(), - ToTime: time.Now(), - }, - &testData{ + StoreIDs: []int{100190}, + SkuIDs: []int{23847}, ResultCount: 1, - SkuIDs: []int{22714}, - FromTime: time.Now(), - ToTime: time.Now(), - }, - &testData{ - ResultCount: 0, - VendorIDs: []int{model.VendorIDEBAI}, - FromTime: time.Now(), - ToTime: time.Now(), + FromTime: utils.Str2Time("2019-08-06 12:34:56"), + ToTime: utils.Str2Time("2019-08-06 12:34:56"), }, } { result, err := GetEffectiveActStoreSkuInfo(GetDB(), v.ActID, v.VendorIDs, v.StoreIDs, v.SkuIDs, v.FromTime, v.ToTime) @@ -54,6 +32,7 @@ func TestGetEffectiveActStoreSkuInfo(t *testing.T) { t.Fatal(err) } if len(result) != v.ResultCount { + t.Log(utils.Format4Output(result, false)) t.Errorf("cond:%s, len(result):%d, v.ResultCount:%d", utils.Format4Output(v, false), len(result), v.ResultCount) } } diff --git a/business/model/dao/dao_auth2.go b/business/model/dao/dao_auth2.go index 17241fe1f..29e0fa56c 100644 --- a/business/model/dao/dao_auth2.go +++ b/business/model/dao/dao_auth2.go @@ -5,7 +5,6 @@ import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/globals" ) func GetAuthBind(db *DaoDB, userID, authType, authID string) (authBind *model.AuthBind, err error) { @@ -33,7 +32,7 @@ func GetAuthBind(db *DaoDB, userID, authType, authID string) (authBind *model.Au sql += " AND t1.auth_id = ?" sqlParams = append(sqlParams, authID) } - globals.SugarLogger.Debugf("GetAuthBind sql:%s, sqlParams:%s", sql, utils.Format4Output(sqlParams, false)) + // globals.SugarLogger.Debugf("GetAuthBind sql:%s, sqlParams:%s", sql, utils.Format4Output(sqlParams, false)) err = GetRow(db, &authBind, sql, sqlParams...) return authBind, err } diff --git a/business/model/dao/dao_bz.go b/business/model/dao/dao_bz.go index a658a0e25..a653b54ee 100644 --- a/business/model/dao/dao_bz.go +++ b/business/model/dao/dao_bz.go @@ -36,7 +36,7 @@ func GetEntitiesByKV(db *DaoDB, item interface{}, conditions map[string]interfac qs = qs.Filter(model.FieldDeletedAt, utils.DefaultTimeValue) } } - _, err = qs.All(item) + _, err = qs.Limit(-1).All(item) return err }, reflect.TypeOf(item).Name()) return err diff --git a/business/model/dao/dao_user2.go b/business/model/dao/dao_user2.go index 51ed8c4c8..06802f6a8 100644 --- a/business/model/dao/dao_user2.go +++ b/business/model/dao/dao_user2.go @@ -23,7 +23,10 @@ func GetUserByID(db *DaoDB, fieldName, fieldValue string) (user *model.User, err return user, err } -func GetUsers(db *DaoDB, userType int, userID2, mobile, userName string) (userList []*model.User, err error) { +func GetUsers(db *DaoDB, userType int, keyword string, userIDs []string, userID2, mobile string) (userList []*model.User, err error) { + if userType == 0 { + userType = 255 + } sql := ` SELECT * FROM user t1 @@ -32,6 +35,10 @@ func GetUsers(db *DaoDB, userType int, userID2, mobile, userName string) (userLi utils.DefaultTimeValue, userType, } + if len(userIDs) > 0 { + sql += " AND t1.user_id IN (" + GenQuestionMarks(len(userIDs)) + ")" + sqlParams = append(sqlParams, userIDs) + } if userID2 != "" { sql += " AND t1.user_id2 = ?" sqlParams = append(sqlParams, userID2) @@ -40,9 +47,10 @@ func GetUsers(db *DaoDB, userType int, userID2, mobile, userName string) (userLi sql += " AND t1.mobile = ?" sqlParams = append(sqlParams, mobile) } - if userName != "" { - sql += " AND t1.name LIKE ?" - sqlParams = append(sqlParams, "%"+userName+"%") + if keyword != "" { + keywordLike := "%" + keyword + "%" + sql += " AND (t1.user_id2 LIKE ? OR t1.mobile LIKE ? OR t1.email LIKE ? OR t1.name LIKE ?)" + sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike) } err = GetRows(db, &userList, sql, sqlParams...) return userList, err diff --git a/business/model/user.go b/business/model/user.go index 99349af90..0c92d0254 100644 --- a/business/model/user.go +++ b/business/model/user.go @@ -31,6 +31,7 @@ type User struct { Status int8 `json:"status"` Type int8 `json:"type"` // 用户类型 IDCardNo string `orm:"size(18);column(id_card_no)" json:"idCardNo"` // 身份证号 + Remark string `orm:"size(255)" json:"remark"` } func (*User) TableUnique() [][]string { diff --git a/business/partner/printer/feie/feie.go b/business/partner/printer/feie/feie.go index 84ba7ca04..9179cbdaa 100644 --- a/business/partner/printer/feie/feie.go +++ b/business/partner/printer/feie/feie.go @@ -108,7 +108,10 @@ func (c *PrinterHandler) GetVendorID() int { func (c *PrinterHandler) PrintMsg(ctx *jxcontext.Context, id1, id2, msgTitle, msgContent string) (printerStatus *partner.PrinterStatus, err error) { globals.SugarLogger.Debugf("PrintMsg id1:%s", id1) if id1 != "" { - if _, err = api.FeieAPI.PrintMsg(id1, msgContent, 1); err == nil { + if globals.EnableStoreWrite { + _, err = api.FeieAPI.PrintMsg(id1, msgContent, 1) + } + if err == nil { printerStatus, err = c.GetPrinterStatus(ctx, id1, id2) } } else { @@ -138,13 +141,18 @@ func (c *PrinterHandler) PrintOrder(ctx *jxcontext.Context, store *model.Store, } func (c *PrinterHandler) RegisterPrinter(ctx *jxcontext.Context, printerSN, printerKey, printerName string) (notUsed1, notUsed2 string, err error) { - _, no, err := api.FeieAPI.PrinterAddList([]*feieapi.PrinterInfo{ - &feieapi.PrinterInfo{ - SN: printerSN, - Key: printerKey, - Name: printerName, - }, - }) + var no map[string]string + if globals.EnableStoreWrite { + _, no, err = api.FeieAPI.PrinterAddList([]*feieapi.PrinterInfo{ + &feieapi.PrinterInfo{ + SN: printerSN, + Key: printerKey, + Name: printerName, + }, + }) + } else { + no = make(map[string]string) + } if err == nil { if no[printerSN] != "" { if no[printerSN] == feieapi.ErrMsgAlredyAdded { @@ -158,7 +166,9 @@ func (c *PrinterHandler) RegisterPrinter(ctx *jxcontext.Context, printerSN, prin } func (c *PrinterHandler) UnregisterPrinter(ctx *jxcontext.Context, printerSN, notUsed string) (err error) { - _, _, err = api.FeieAPI.PrinterDelList([]string{printerSN}) + if globals.EnableStoreWrite { + _, _, err = api.FeieAPI.PrinterDelList([]string{printerSN}) + } return err } @@ -171,7 +181,9 @@ func (c *PrinterHandler) RebindPrinter(ctx *jxcontext.Context, lastBindResult *p } func (c *PrinterHandler) EmptyPrintList(ctx *jxcontext.Context, id1, id2 string) (err error) { - err = api.FeieAPI.DelPrinterSqs(id1) + if globals.EnableStoreWrite { + err = api.FeieAPI.DelPrinterSqs(id1) + } return err } diff --git a/business/partner/printer/xiaowm/xiaowm.go b/business/partner/printer/xiaowm/xiaowm.go index 230c865a1..23a86639a 100644 --- a/business/partner/printer/xiaowm/xiaowm.go +++ b/business/partner/printer/xiaowm/xiaowm.go @@ -184,7 +184,10 @@ func (c *PrinterHandler) GetVendorID() int { func (c *PrinterHandler) PrintMsg(ctx *jxcontext.Context, printerNumber, printerToken, msgTitle, msgContent string) (printerStatus *partner.PrinterStatus, err error) { globals.SugarLogger.Debugf("PrintMsg printerNumber:%s", printerNumber) if printerNumber != "" { - if _, err = api.XiaoWMAPI.SendMsg(printerNumber, printerToken, msgContent); err == nil { + if globals.EnableStoreWrite { + _, err = api.XiaoWMAPI.SendMsg(printerNumber, printerToken, msgContent) + } + if err == nil { printerStatus, err = c.GetPrinterStatus(ctx, printerNumber, printerToken) } } else { @@ -235,9 +238,14 @@ func (c *PrinterHandler) RegisterPrinter(ctx *jxcontext.Context, printerNumber, if printerNumber == "" { //len(printerNumber) != len("7JizmSyiXNzkggaqU") { err = fmt.Errorf("外卖管家打印机设备编号:%s长度不合法", printerNumber) } else { - if printerToken, err = api.XiaoWMAPI.AuthPrinter(printerNumber, "", ""); err == nil { + if globals.EnableStoreWrite { + printerToken, err = api.XiaoWMAPI.AuthPrinter(printerNumber, "", "") + } + if err == nil { if _, err = c.GetPrinterStatus(ctx, printerNumber, printerToken); err != nil { - c.UnregisterPrinter(ctx, printerNumber, printerToken) + if globals.EnableStoreWrite { + c.UnregisterPrinter(ctx, printerNumber, printerToken) + } } } } @@ -246,7 +254,9 @@ func (c *PrinterHandler) RegisterPrinter(ctx *jxcontext.Context, printerNumber, } func (c *PrinterHandler) UnregisterPrinter(ctx *jxcontext.Context, printerNumber, printerToken string) (err error) { - err = api.XiaoWMAPI.DelPrinter(printerNumber, printerToken) + if globals.EnableStoreWrite { + err = api.XiaoWMAPI.DelPrinter(printerNumber, printerToken) + } return err } diff --git a/business/partner/printer/yilianyun/yilianyun.go b/business/partner/printer/yilianyun/yilianyun.go index ae205ddb0..744b7c877 100644 --- a/business/partner/printer/yilianyun/yilianyun.go +++ b/business/partner/printer/yilianyun/yilianyun.go @@ -102,7 +102,10 @@ func (c *PrinterHandler) GetVendorID() int { func (c *PrinterHandler) PrintMsg(ctx *jxcontext.Context, machineCode, possibleToken, msgTitle, msgContent string) (printerStatus *partner.PrinterStatus, err error) { globals.SugarLogger.Debugf("PrintMsg machineCode:%s", machineCode) if machineCode != "" { - if err = getApiByToken(possibleToken).PrintMsgWithToken(machineCode, msgTitle, msgContent, possibleToken); err == nil { + if globals.EnableStoreWrite { + err = getApiByToken(possibleToken).PrintMsgWithToken(machineCode, msgTitle, msgContent, possibleToken) + } + if err == nil { printerStatus, err = c.GetPrinterStatus(ctx, machineCode, possibleToken) } } else { @@ -137,12 +140,16 @@ func (c *PrinterHandler) PrintOrder(ctx *jxcontext.Context, store *model.Store, } func (c *PrinterHandler) RegisterPrinter(ctx *jxcontext.Context, machineCode, secret, printerName string) (notUsed1, notUsed2 string, err error) { - err = api.YilianyunAPI.AddPrinter(machineCode, secret, printerName) + if globals.EnableStoreWrite { + err = api.YilianyunAPI.AddPrinter(machineCode, secret, printerName) + } return "", "", err } func (c *PrinterHandler) UnregisterPrinter(ctx *jxcontext.Context, machineCode, notUsed string) (err error) { - err = api.YilianyunAPI.DeletePrinter(machineCode) + if globals.EnableStoreWrite { + err = api.YilianyunAPI.DeletePrinter(machineCode) + } return err } @@ -160,7 +167,12 @@ func (c *PrinterHandler) BindPrinter(ctx *jxcontext.Context, mapData map[string] } func (c *PrinterHandler) RebindPrinter(ctx *jxcontext.Context, lastBindResult *partner.BindPrinterResult) (bindResult *partner.BindPrinterResult, err error) { - tokenInfo, err := api.YilianyunAPI2.RefreshToken(lastBindResult.PrinterKey2) + var tokenInfo *yilianyunapi.TokenInfo + if globals.EnableStoreWrite { + tokenInfo, err = api.YilianyunAPI2.RefreshToken(lastBindResult.PrinterKey2) + } else { + tokenInfo = &yilianyunapi.TokenInfo{} + } if err == nil { bindResult = yilianyunToken2BindResult(tokenInfo) } @@ -184,11 +196,15 @@ func getApiByToken(possibleToken string) *yilianyunapi.API { } func (c *PrinterHandler) EmptyPrintList(ctx *jxcontext.Context, id1, id2 string) (err error) { - err = api.YilianyunAPI.CancelAll(id1, id2) + if globals.EnableStoreWrite { + err = api.YilianyunAPI.CancelAll(id1, id2) + } return err } func (c *PrinterHandler) PlayText(ctx *jxcontext.Context, id1, id2, orderID, text string) (printerStatus *partner.PrinterStatus, err error) { - err = api.YilianyunAPI.PlayText(id1, orderID, text, id2) + if globals.EnableStoreWrite { + err = api.YilianyunAPI.PlayText(id1, orderID, text, id2) + } return nil, err } diff --git a/business/partner/printer/zhongwu/zhongwu.go b/business/partner/printer/zhongwu/zhongwu.go index cf33e0919..42dd9a148 100644 --- a/business/partner/printer/zhongwu/zhongwu.go +++ b/business/partner/printer/zhongwu/zhongwu.go @@ -104,7 +104,9 @@ func (c *PrinterHandler) PrintMsg(ctx *jxcontext.Context, deviceID, deviceSecret globals.SugarLogger.Debugf("PrintMsg deviceID:%s", deviceID) if deviceID != "" { var status int - _, status, err = api.ZhongwuAPI.PrintMsg(deviceID, deviceSecret, msgContent) + if globals.EnableStoreWrite { + _, status, err = api.ZhongwuAPI.PrintMsg(deviceID, deviceSecret, msgContent) + } if err == nil { printerStatus = c.translateStatus(status) } @@ -166,7 +168,9 @@ func (c *PrinterHandler) RebindPrinter(ctx *jxcontext.Context, lastBindResult *p } func (c *PrinterHandler) EmptyPrintList(ctx *jxcontext.Context, id1, id2 string) (err error) { - _, err = api.ZhongwuAPI.EmptyPrintQueue(id1, id2) + if globals.EnableStoreWrite { + _, err = api.ZhongwuAPI.EmptyPrintQueue(id1, id2) + } return err } diff --git a/business/partner/purchase/jd/store_sku2.go b/business/partner/purchase/jd/store_sku2.go index 9c2a24ab6..d5c7e140e 100644 --- a/business/partner/purchase/jd/store_sku2.go +++ b/business/partner/purchase/jd/store_sku2.go @@ -65,12 +65,12 @@ func (p *PurchaseHandler) getStoreSkusBareInfoLimitSize(ctx *jxcontext.Context, } func (p *PurchaseHandler) GetStoreSkusBareInfo(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, inStoreSkuList []*partner.StoreSkuInfo) (outStoreSkuList []*partner.StoreSkuInfo, err error) { - result, err := putils.FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, err error) { + result, err := putils.FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { list, err := p.getStoreSkusBareInfoLimitSize(ctx, task, storeID, vendorStoreID, batchedStoreSkuList) if err == nil { result = list } - return result, err + return result, len(list), err }, ctx, parentTask, inStoreSkuList, jdapi.MaxStoreSkuBatchSize, true) for _, v := range result { outStoreSkuList = append(outStoreSkuList, v.(*partner.StoreSkuInfo)) diff --git a/business/partner/putils/store_sku.go b/business/partner/putils/store_sku.go index a8cd7493b..57da5d120 100644 --- a/business/partner/putils/store_sku.go +++ b/business/partner/putils/store_sku.go @@ -29,9 +29,9 @@ func (p *DefSingleStorePlatform) DeleteStoreAllSkus(ctx *jxcontext.Context, pare VendorSkuID: v.SkuList[0].VendorSkuID, } } - _, err = FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, err error) { + _, err = FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { _, err = p.DeleteStoreSkus(ctx, storeID, vendorStoreID, batchedStoreSkuList) - return nil, err + return nil, 0, err }, ctx, parentTask, storeStoreList, p.GetStoreSkusBatchSize(partner.FuncDeleteStoreSkus), isContinueWhenError) return err } @@ -76,8 +76,9 @@ func flatCatList(catList []*partner.BareCategoryInfo) (flattedCatList []*partner } func (p *DefSingleStorePlatform) GetStoreSkusBareInfo(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, inStoreSkuList []*partner.StoreSkuInfo) (outStoreSkuList []*partner.StoreSkuInfo, err error) { - resultList, err := FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, err error) { - return p.GetStoreSkusFullInfo(ctx, parentTask, storeID, vendorStoreID, batchedStoreSkuList) + resultList, err := FreeBatchStoreSkuInfo(func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { + result, err = p.GetStoreSkusFullInfo(ctx, parentTask, storeID, vendorStoreID, batchedStoreSkuList) + return result, successCount, err }, ctx, parentTask, inStoreSkuList, p.GetStoreSkusBatchSize(partner.FuncGetStoreSkusFullInfo), true) if err != nil || len(resultList) == 0 { return nil, err @@ -133,24 +134,24 @@ func (p *DefSingleStorePlatform) GetStoreCategory(ctx *jxcontext.Context, storeI return cat, err } -func FreeBatchStoreSkuInfo(handler func(tasksch.ITask, []*partner.StoreSkuInfo) (interface{}, error), ctx *jxcontext.Context, parentTask tasksch.ITask, storeSkuList []*partner.StoreSkuInfo, batchSize int, isContinueWhenError bool) (resultList []interface{}, err error) { - if len(storeSkuList) > batchSize { - task := tasksch.NewParallelTask("FreeBatchStoreSkuInfo", tasksch.NewParallelConfig().SetParallelCount(1).SetBatchSize(batchSize).SetIsContinueWhenError(isContinueWhenError), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { +func FreeBatchStoreSkuInfo(handler func(tasksch.ITask, []*partner.StoreSkuInfo) (interface{}, int, error), ctx *jxcontext.Context, parentTask tasksch.ITask, storeSkuList []*partner.StoreSkuInfo, batchSize int, isContinueWhenError bool) (resultList []interface{}, err error) { + if true { //len(storeSkuList) > batchSize { + task := tasksch.NewParallelTask2("FreeBatchStoreSkuInfo", tasksch.NewParallelConfig().SetParallelCount(1).SetBatchSize(batchSize).SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, successCount int, err error) { batchStoreSkuList := make([]*partner.StoreSkuInfo, len(batchItemList)) for k, v := range batchItemList { batchStoreSkuList[k] = v.(*partner.StoreSkuInfo) } - retVal, err = handler(task, batchStoreSkuList) + retVal, successCount, err = handler(task, batchStoreSkuList) if err != nil { retVal = nil } - return retVal, err + return retVal, successCount, err }, storeSkuList) tasksch.HandleTask(task, parentTask, false).Run() resultList, err = task.GetResult(0) } else { - result, err2 := handler(parentTask, storeSkuList) + result, _, err2 := handler(parentTask, storeSkuList) if err = err2; err == nil { resultList = utils.Interface2Slice(result) } @@ -158,24 +159,24 @@ func FreeBatchStoreSkuInfo(handler func(tasksch.ITask, []*partner.StoreSkuInfo) return resultList, err } -func FreeBatchStoreSkuSyncInfo(handler func(tasksch.ITask, []*dao.StoreSkuSyncInfo) (interface{}, error), ctx *jxcontext.Context, parentTask tasksch.ITask, storeSkuList []*dao.StoreSkuSyncInfo, batchSize int, isContinueWhenError bool) (resultList []interface{}, err error) { - if len(storeSkuList) > batchSize { - task := tasksch.NewParallelTask("FreeBatchStoreSkuSyncInfo", tasksch.NewParallelConfig().SetParallelCount(1).SetBatchSize(batchSize).SetIsContinueWhenError(isContinueWhenError), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { +func FreeBatchStoreSkuSyncInfo(handler func(tasksch.ITask, []*dao.StoreSkuSyncInfo) (interface{}, int, error), ctx *jxcontext.Context, parentTask tasksch.ITask, storeSkuList []*dao.StoreSkuSyncInfo, batchSize int, isContinueWhenError bool) (resultList []interface{}, err error) { + if true { //len(storeSkuList) > batchSize { + task := tasksch.NewParallelTask2("FreeBatchStoreSkuSyncInfo", tasksch.NewParallelConfig().SetParallelCount(1).SetBatchSize(batchSize).SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, successCount int, err error) { batchStoreSkuList := make([]*dao.StoreSkuSyncInfo, len(batchItemList)) for k, v := range batchItemList { batchStoreSkuList[k] = v.(*dao.StoreSkuSyncInfo) } - retVal, err = handler(task, batchStoreSkuList) + retVal, successCount, err = handler(task, batchStoreSkuList) if err != nil { retVal = nil } - return retVal, err + return retVal, successCount, err }, storeSkuList) tasksch.HandleTask(task, parentTask, false).Run() resultList, err = task.GetResult(0) } else { - result, err2 := handler(parentTask, storeSkuList) + result, _, err2 := handler(parentTask, storeSkuList) if err = err2; err == nil { resultList = utils.Interface2Slice(result) } diff --git a/controllers/auth2.go b/controllers/auth2.go index 8e54b9f9c..679932ac1 100644 --- a/controllers/auth2.go +++ b/controllers/auth2.go @@ -73,9 +73,9 @@ func (c *Auth2Controller) Login() { }) } -// @Title 钉钉认证回调接口 -// @Description 钉钉认证回调接口,自己不能直接调用 -// @Param token header string true "认证token" +// @Title 得到自己登录token的信息 +// @Description 得到自己登录token的信息 +// @Param token header string true "认证token" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /GetTokenInfo [get] @@ -240,10 +240,10 @@ func (c *Auth2Controller) AddAuthBind() { // @Title 删除认证方式 // @Description 删除认证方式 // @Param token header string true "认证token" -// @Param authType formData string true "登录类型,参见Login的描述" +// @Param authType query string true "登录类型,参见Login的描述" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult -// @router /RemoveAuthBind [post] +// @router /RemoveAuthBind [delete] func (c *Auth2Controller) RemoveAuthBind() { c.callRemoveAuthBind(func(params *tAuth2RemoveAuthBindParams) (retVal interface{}, errCode string, err error) { authInfo, err2 := params.Ctx.GetV2AuthInfo() diff --git a/controllers/cms_user2.go b/controllers/cms_user2.go index e435af5eb..9bf507b19 100644 --- a/controllers/cms_user2.go +++ b/controllers/cms_user2.go @@ -54,16 +54,20 @@ func (c *User2Controller) GetBindAuthInfo() { // @Title 得到用户列表 // @Description 得到用户列表 // @Param token header string true "认证token" -// @Param userType query int true "用户类型" -// @Param userID2 query string faslse "用户id2" +// @Param userType query int true "用户类型(0表示全部)" +// @Param keyword query string faslse "关键字,可以部分匹配" +// @Param userIDs query string faslse "用户id列表" +// @Param userID2 query string faslse "用户id2,必须全匹配(外部唯一标识)" // @Param mobile query string faslse "用户手机,必须全匹配" -// @Param userName query string faslse "用户名,可以部分匹配" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /GetUsers [get] func (c *User2Controller) GetUsers() { c.callGetUsers(func(params *tUser2GetUsersParams) (retVal interface{}, errCode string, err error) { - retVal, err = cms.GetUsers(params.Ctx, params.UserType, params.UserID2, params.Mobile, params.UserName) + var userIDs []string + if err = jxutils.Strings2Objs(params.UserIDs, &userIDs); err == nil { + retVal, err = cms.GetUsers(params.Ctx, params.UserType, params.Keyword, userIDs, params.UserID2, params.Mobile) + } return retVal, "", err }) } diff --git a/globals/api2/api2.go b/globals/api2/api2.go new file mode 100644 index 000000000..a781b3e4e --- /dev/null +++ b/globals/api2/api2.go @@ -0,0 +1,14 @@ +package api2 + +import ( + "git.rosy.net.cn/jx-callback/business/authz" + "git.rosy.net.cn/jx-callback/business/authz/casbinauth" +) + +var ( + RoleMan authz.IAuthz +) + +func Init() { + RoleMan, _ = casbinauth.New("business/authz/casbinauth/rbac_model.conf") +} diff --git a/globals/beegodb/beegodb.go b/globals/beegodb/beegodb.go index 857c4932f..361a4f573 100644 --- a/globals/beegodb/beegodb.go +++ b/globals/beegodb/beegodb.go @@ -1,6 +1,7 @@ package beegodb import ( + "git.rosy.net.cn/jx-callback/business/authz/casbinauth" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/legacymodel" "git.rosy.net.cn/jx-callback/globals" @@ -51,6 +52,8 @@ func Init() { orm.RegisterModel(&model.Act{}, &model.ActOrderRule{}, &model.ActStoreSku{}) orm.RegisterModel(&model.ActMap{}, &model.ActStoreSkuMap{}) orm.RegisterModel(&model.NewConfig{}) + + casbinauth.RegisterModel() // create table orm.RunSyncdb("default", false, true) } diff --git a/globals/testinit/testinit.go b/globals/testinit/testinit.go index 9aa3e0d45..301fe1a89 100644 --- a/globals/testinit/testinit.go +++ b/globals/testinit/testinit.go @@ -2,10 +2,12 @@ package testinit import ( "git.rosy.net.cn/jx-callback/globals/api" + "git.rosy.net.cn/jx-callback/globals/api2" "git.rosy.net.cn/jx-callback/globals/testinit1" ) func Init() { testinit1.Init() api.Init() + api2.Init() } diff --git a/main.go b/main.go index c5c8d3e42..5bf1ad462 100644 --- a/main.go +++ b/main.go @@ -17,6 +17,7 @@ import ( "git.rosy.net.cn/jx-callback/business/partner/purchase/ebai" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" + "git.rosy.net.cn/jx-callback/globals/api2" "git.rosy.net.cn/jx-callback/globals/beegodb" _ "git.rosy.net.cn/jx-callback/routers" @@ -46,6 +47,8 @@ var ( func Init() { beegodb.Init() + api2.Init() + defsch.Init() buildTime, err := time.ParseInLocation(time.RFC3339, BuildDate, time.UTC) if err == nil { diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 5bdab521c..14830da96 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -146,7 +146,7 @@ func init() { beego.ControllerComments{ Method: "RemoveAuthBind", Router: `/RemoveAuthBind`, - AllowHTTPMethods: []string{"post"}, + AllowHTTPMethods: []string{"delete"}, MethodParams: param.Make(), Filters: nil, Params: nil})