Files
jx-callback/business/jxstore/cms/user.go
2018-09-19 11:30:57 +08:00

123 lines
3.9 KiB
Go

package cms
import (
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/globals"
"github.com/astaxie/beego/orm"
)
type StoreUserInfo struct {
model.WeiXins
Members []*model.WeiXins `orm:"-" json:"members"`
MembersStr string `json:"-"`
}
func GetStoreUsers(storeID int) (storeUserInfo *StoreUserInfo, err error) {
sql := `
SELECT t1.id, t1.jxstoreid, t1.openid, t1.tel, t1.nickname, t1.parentid,
CONCAT("[", GROUP_CONCAT(CONCAT('{"id":', t2.id, ',"parentID":', t2.parentid, ',"openID":"', IF(t2.openid IS NULL, "", t2.openid), '","tel":"', t2.tel, '","nickname":"', IF(t2.nickname IS NULL, "", t2.nickname), '"}')), "]") members_str FROM weixins t1
LEFT JOIN weixins t2 ON t2.parentid = t1.id
WHERE t1.parentid = -1 AND t1.jxstoreid = ?
GROUP BY t1.id, t1.jxstoreid, t1.openid, t1.tel, t1.nickname, t1.parentid;
`
storeUserInfo = new(StoreUserInfo)
if err = dao.GetRow(nil, storeUserInfo, sql, storeID); err == nil {
if storeUserInfo.MembersStr != "" {
err = utils.UnmarshalUseNumber([]byte(storeUserInfo.MembersStr), &storeUserInfo.Members)
}
}
return storeUserInfo, err
}
func GetUserInfo(mobile string) (storeUserInfo *StoreUserInfo, err error) {
sql := `
SELECT t1.id, t1.jxstoreid, t1.openid, t1.tel, t1.nickname, t1.parentid,
CONCAT("[", GROUP_CONCAT(CONCAT('{"id":', t2.id, ',"openID":"', IF(t2.openid IS NULL, "", t2.openid), '","tel":"', t2.tel, '","nickname":"', IF(t2.nickname IS NULL, "", t2.nickname), '"}')), "]") members_str
FROM weixins t1
LEFT JOIN weixins t2 ON t2.parentid = t1.id
WHERE t1.tel = ?
GROUP BY t1.id, t1.jxstoreid, t1.openid, t1.tel, t1.nickname, t1.parentid;
`
storeUserInfo = new(StoreUserInfo)
if err = dao.GetRow(nil, storeUserInfo, sql, mobile); err == nil {
if storeUserInfo.MembersStr != "" {
err = utils.UnmarshalUseNumber([]byte(storeUserInfo.MembersStr), &storeUserInfo.Members)
}
}
return storeUserInfo, err
}
func UnbindMobile(mobile string) (num int64, err error) {
return dao.UpdateEntityByKV(nil, &model.WeiXins{}, map[string]interface{}{
"JxStoreID": nil,
"ParentID": -1,
}, map[string]interface{}{
"Tel": mobile,
})
}
func BindMobile2Store(mobile string, storeID int) (num int64, err error) {
db := dao.GetDB()
user, err2 := verifyMobileIsBlank(db, mobile)
if err = err2; err == nil || err == orm.ErrNoRows {
user.JxStoreID = storeID
if err == nil {
num, err = dao.UpdateEntity(db, user, "JxStoreID")
} else {
err = dao.CreateEntity(db, user)
num = 1
}
}
return num, err
}
func AddMobile2Mobile(parentMobile, mobile string) (num int64, err error) {
db := dao.GetDB()
parentUser := &model.WeiXins{}
parentUser.Tel = parentMobile
if err = dao.GetEntity(db, parentUser, "Tel"); err == nil {
if parentUser.ParentID == -1 {
globals.SugarLogger.Debug(parentUser)
user, err2 := verifyMobileIsBlank(db, mobile)
if err = err2; err == nil || err == orm.ErrNoRows {
user.ParentID = parentUser.ID
if err == nil {
num, err = dao.UpdateEntity(db, user, "ParentID")
} else {
err = dao.CreateEntity(db, user)
num = 1
}
}
} else {
err = fmt.Errorf("%s本身是成员", parentMobile)
}
}
return num, err
}
func ChangeMobile(curMobile, expectedMobile string) (num int64, err error) {
return dao.UpdateEntityByKV(nil, &model.WeiXins{}, map[string]interface{}{
"Tel": expectedMobile,
}, map[string]interface{}{
"Tel": curMobile,
})
}
func verifyMobileIsBlank(db *dao.DaoDB, mobile string) (user *model.WeiXins, err error) {
user = &model.WeiXins{
Tel: mobile,
}
if err = dao.GetEntity(db, user, "Tel"); err == nil {
if user.ParentID != -1 && user.ParentID != 0 {
err = fmt.Errorf("%s已经是小组成员", mobile)
} else if user.JxStoreID != 0 {
err = fmt.Errorf("%s本身已经是%d的组长", mobile, user.JxStoreID)
}
}
return user, err
}