182 lines
4.9 KiB
Go
182 lines
4.9 KiB
Go
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 {
|
|
sql += " OR t1.market_man_role IN (" + GenQuestionMarks(len(shortRoleNameList)) + ") OR t1.operator_role IN (" + GenQuestionMarks(len(shortRoleNameList)) + ")"
|
|
sqlParams = append(sqlParams, 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
|
|
}
|