package dao import ( "fmt" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/legacymodel" ) type StoreUserInfo struct { legacymodel.WeiXins ParentMobile string `json:"parentMobile"` Members []*legacymodel.WeiXins `orm:"-" json:"members"` MembersStr string `json:"-"` } type StoreWithCityName struct { model.Store CityName string `json:"cityName"` } func CreateWeiXins(db *DaoDB, user *legacymodel.WeiXins) (err error) { Begin(db) if err = CreateEntity(db, user); err != nil { Rollback(db) return err } if err = SetWeiXinsEmpty2Null(db, user); err != nil { Rollback(db) return err } Commit(db) return err } func SetWeiXinsEmpty2Null(db *DaoDB, user *legacymodel.WeiXins) (err error) { _, err = ExecuteSQL(db, ` UPDATE weixins SET openid = IF(openid = '', NULL, openid), openid_mini = IF(openid_mini = '', NULL, openid_mini), openid_union = IF(openid_union = '', NULL, openid_union), tel = IF(tel = '', NULL, tel), parentid = IF(parentid = 0, -1, parentid) WHERE id = ? `, user.ID) return err } func GetWeiXinUserByIDs(db *DaoDB, tel, unionID, openID, miniOpenID string) (user *legacymodel.WeiXins, err error) { fieldList := []string{ "Tel", "OpenIDUnion", "OpenID", "OpenIDMini", } valueList := []string{ tel, unionID, openID, miniOpenID, } user = &legacymodel.WeiXins{ Tel: tel, OpenIDUnion: unionID, OpenID: openID, OpenIDMini: miniOpenID, } for index := range valueList { if valueList[index] != "" { if err = GetEntity(db, user, fieldList[index]); err == nil { return user, nil } } } return nil, err } func UpdateWeiXinUser(db *DaoDB, tel, nickname, unionID, openID, miniOpenID string) (err error) { user := &legacymodel.WeiXins{ Tel: tel, } if err = GetEntity(db, user, "Tel"); err == nil { updateFields := []string{} if openID != "" { user.OpenID = openID updateFields = append(updateFields, "OpenID") } if unionID != "" { user.OpenIDUnion = unionID updateFields = append(updateFields, "OpenIDUnion") } if miniOpenID != "" { user.OpenIDMini = miniOpenID updateFields = append(updateFields, "OpenIDMini") } if nickname != "" { user.NickName = nickname updateFields = append(updateFields, "NickName") } _, err = UpdateEntity(db, user, updateFields...) } return err } func GetUserStoreInfo(db *DaoDB, fieldName, fieldValue string) (storeUserInfo *StoreUserInfo, err error) { sql := fmt.Sprintf(` SELECT t1.id, IF(t3.id IS NULL, t1.jxstoreid, t3.jxstoreid) jxstoreid, t1.openid, t1.tel, t1.nickname, t1.parentid, t3.tel parent_mobile, CONCAT("[", GROUP_CONCAT(CONCAT('{"id":', t2.id, ',"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 LEFT JOIN weixins t3 ON t1.parentid = t3.id WHERE t1.%s = ? GROUP BY 1,2,3,4,5,6,7; `, fieldName) if err = GetRow(db, &storeUserInfo, sql, fieldValue); err == nil { // todo err = nil if storeUserInfo.MembersStr != "" { err = utils.UnmarshalUseNumber([]byte(storeUserInfo.MembersStr), &storeUserInfo.Members) } } return storeUserInfo, err } func GetStoreListByMobile(db *DaoDB, mobile string) (storeList []*StoreWithCityName, err error) { if mobile != "" { sql := ` SELECT DISTINCT t1.*, t2.name city_name FROM ( SELECT * FROM store t1 WHERE (t1.market_man_phone = ? OR t1.operator_phone = ?) UNION DISTINCT SELECT t1.* FROM store t1 JOIN weixins t2 ON t2.jxstoreid = t1.id AND t2.parentid = -1 LEFT JOIN weixins t3 ON t3.parentid = t2.id WHERE (t2.tel = ? OR t3.tel = ?) ) t1 LEFT JOIN place t2 ON t2.code = t1.city_code WHERE t1.deleted_at = ? ORDER BY t1.name` sqlParams := []interface{}{ mobile, mobile, mobile, mobile, utils.DefaultTimeValue, } err = GetRows(db, &storeList, sql, sqlParams...) } return storeList, err } func GetStoreListByMobileOrStoreIDs(db *DaoDB, mobile string, shortRoleNameList []string, storeIDs []int) (storeList []*StoreWithCityName, err error) { sql := ` SELECT t1.*, t2.name city_name FROM store t1 LEFT JOIN place t2 ON t2.code = t1.city_code WHERE t1.deleted_at = ? AND ( 1 = 0` sqlParams := []interface{}{ utils.DefaultTimeValue, } if mobile != "" { sql += " OR t1.market_man_phone = ? OR t1.operator_phone = ?" sqlParams = append(sqlParams, mobile, mobile) } if len(shortRoleNameList) > 0 { questionMarks := GenQuestionMarks(len(shortRoleNameList)) sql += " OR t1.market_man_role IN (" + questionMarks + ") OR t1.operator_role IN (" + questionMarks + ") OR t1.operator_role2 IN (" + questionMarks + ")" sqlParams = append(sqlParams, shortRoleNameList, shortRoleNameList, shortRoleNameList) } if len(storeIDs) > 0 { sql += " OR t1.id IN (" + GenQuestionMarks(len(storeIDs)) + ")" sqlParams = append(sqlParams, storeIDs) } sql += ")" err = GetRows(db, &storeList, sql, sqlParams...) return storeList, err }