zjxpcyc 6 years ago
parent
commit
c12c1386dc

+ 2
- 2
conf/db.conf View File

5
 con_protocol = tcp
5
 con_protocol = tcp
6
 
6
 
7
 ; 数据库地址,可以使用IP
7
 ; 数据库地址,可以使用IP
8
-db_addr      = localhost
8
+db_addr      = 192.168.0.122
9
 
9
 
10
 ; 端口
10
 ; 端口
11
 db_port      = 3306
11
 db_port      = 3306
26
 db_debug     = false
26
 db_debug     = false
27
 
27
 
28
 ; 字符集
28
 ; 字符集
29
-char_set     = utf8
29
+char_set     = utf8mb4

+ 28
- 2
controllers/auth.go View File

75
 	// 用户微信信息
75
 	// 用户微信信息
76
 	var wxDetail map[string]interface{}
76
 	var wxDetail map[string]interface{}
77
 	detailRaw := c.GetSession("wechat_user")
77
 	detailRaw := c.GetSession("wechat_user")
78
+
78
 	if detailRaw != nil {
79
 	if detailRaw != nil {
79
 		wxDetail = detailRaw.(map[string]interface{})
80
 		wxDetail = detailRaw.(map[string]interface{})
80
 	}
81
 	}
81
 
82
 
83
+	// DEV MODE
84
+	wxDetail = map[string]interface{}{
85
+		"openid":     " OPENID",
86
+		" nickname":  "NICKNAME",
87
+		"sex":        "1",
88
+		"province":   "PROVINCE",
89
+		"city":       "CITY",
90
+		"country":    "COUNTRY",
91
+		"headimgurl": "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
92
+		"unionid":    "o6_bmasdasdsad6_2sgVt7hMZOPfL",
93
+	}
94
+
82
 	if custID == "" && wxDetail == nil {
95
 	if custID == "" && wxDetail == nil {
83
-		wxDetail = c.getWechatDetail()
96
+		wxDetail = c.getWechatDetail(serv)
97
+
84
 		c.SetSession("wechat_user", wxDetail)
98
 		c.SetSession("wechat_user", wxDetail)
85
 	}
99
 	}
86
 
100
 
148
 }
162
 }
149
 
163
 
150
 // getWechatDetail 获取微信个人信息详情
164
 // getWechatDetail 获取微信个人信息详情
151
-func (c *BaseController) getWechatDetail() map[string]interface{} {
165
+func (c *BaseController) getWechatDetail(serv *service.SysServ) map[string]interface{} {
152
 	// 微信 code
166
 	// 微信 code
153
 	code := c.GetString("code")
167
 	code := c.GetString("code")
154
 	if code == "" {
168
 	if code == "" {
155
 		c.ResponseError(
169
 		c.ResponseError(
156
 			errors.New("没有接收到微信 code"),
170
 			errors.New("没有接收到微信 code"),
171
+			http.StatusUnauthorized,
172
+		)
173
+	}
174
+
175
+	// TODO
176
+	// 机构先默认写死
177
+	conf, err := serv.GetWeChatConfig("1")
178
+	if err != nil {
179
+		utils.LogError("查询微信配置失败: " + err.Error())
180
+		c.ResponseError(
181
+			errors.New("没有找到微信相关配置"),
157
 			http.StatusBadRequest,
182
 			http.StatusBadRequest,
158
 		)
183
 		)
159
 	}
184
 	}
160
 
185
 
186
+	utils.InitWeChatClient(conf)
161
 	usr, err := utils.GetWxUserInfo(code)
187
 	usr, err := utils.GetWxUserInfo(code)
162
 	if err != nil {
188
 	if err != nil {
163
 		c.ResponseError(
189
 		c.ResponseError(

+ 16
- 0
controllers/cases/case.go View File

1
 package cases
1
 package cases
2
 
2
 
3
 import (
3
 import (
4
+	"errors"
4
 	"spaceofcheng/services/controllers"
5
 	"spaceofcheng/services/controllers"
5
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/service/cases"
7
 	"spaceofcheng/services/service/cases"
66
 	}
67
 	}
67
 	c.ResponseJSON("删除成功!")
68
 	c.ResponseJSON("删除成功!")
68
 }
69
 }
70
+
71
+// GetOrgCases 获取机构案场
72
+func (c *CaseController) GetOrgCases() {
73
+	org := c.GetString("org")
74
+	if org == "" {
75
+		c.ResponseError(errors.New("未确定机构"))
76
+	}
77
+
78
+	res, err := c.dao.GetAllCasesAndSales(org)
79
+	if err != nil {
80
+		c.ResponseError(err)
81
+	}
82
+
83
+	c.ResponseJSON(res)
84
+}

+ 0
- 9
controllers/config.go View File

24
 		c.Configer[AliYunConf] = aliConf
24
 		c.Configer[AliYunConf] = aliConf
25
 	}
25
 	}
26
 
26
 
27
-	// 微信
28
-	clientType := utils.GetClientType(c.Ctx.Request)
29
-	if clientType == utils.ClientWechat {
30
-		wxConf := c.getConfig("conf/wechat.conf")
31
-		if wxConf != nil {
32
-			c.Configer[WeChatConf] = wxConf
33
-		}
34
-	}
35
-
36
 	// 短信
27
 	// 短信
37
 	smsConf := c.getConfig("conf/sms.conf")
28
 	smsConf := c.getConfig("conf/sms.conf")
38
 	if smsConf != nil {
29
 	if smsConf != nil {

+ 5
- 0
log/common.log View File

20
 2018/08/21 13:41:04 [E] 您没有该案场的权限!
20
 2018/08/21 13:41:04 [E] 您没有该案场的权限!
21
 2018/08/21 14:26:22 [E] 用户登录失败: dial tcp 192.168.0.62:3306: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
21
 2018/08/21 14:26:22 [E] 用户登录失败: dial tcp 192.168.0.62:3306: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
22
 2018/08/21 14:27:06 [E] 用户登录失败: dial tcp 192.168.0.62:3306: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
22
 2018/08/21 14:27:06 [E] 用户登录失败: dial tcp 192.168.0.62:3306: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
23
+2018/08/23 19:57:03 [E] 获取人员映射账户失败: Params type error
24
+2018/08/23 19:58:00 [E] 获取人员映射账户失败: Params type error
25
+2018/08/23 19:58:39 [E] 获取人员映射账户失败: Params type error
26
+2018/08/23 20:03:16 [E] 获取人员映射账户失败: Params type error
27
+2018/08/23 20:05:14 [E] 获取人员映射账户失败: Params type error

+ 43
- 0
models/cases/cases.go View File

107
 	_, err := m.db.Cols(cols...).Where("case_id=?", caseid).Update(caseinfo)
107
 	_, err := m.db.Cols(cols...).Where("case_id=?", caseid).Update(caseinfo)
108
 	return err
108
 	return err
109
 }
109
 }
110
+
111
+// GetCaseByOrg 获取案场列表
112
+func (m *CaseDAO) GetCaseByOrg(org string) ([]model.SysCase, error) {
113
+	var cs []model.SysCase
114
+
115
+	if err := m.db.Where("org_id=?", org).
116
+		And("status=?", models.STATUS_NORMAL).
117
+		Asc("create_date").
118
+		Find(&cs); err != nil {
119
+		return nil, err
120
+	}
121
+
122
+	return cs, nil
123
+}
124
+
125
+type UserCase struct {
126
+	CaseId   string
127
+	CaseName string
128
+	UserId   string
129
+	UserName string
130
+}
131
+
132
+// GetCaseUserByType 获取案场人员
133
+func (m *CaseDAO) GetCaseUserByType(csIDs []string, typeID string) ([]UserCase, error) {
134
+	query := `
135
+		SELECT n.user_id, n.real_name as user_name, s.case_id, '' as case_name
136
+		FROM
137
+			td_user_type s
138
+		JOIN sys_user_type m ON s.type_id = m.type_id
139
+		JOIN sys_user n ON m.user_id = n.user_id
140
+		AND n.status = ?
141
+		WHERE
142
+			s.case_id IN ('` + strings.Join(csIDs, "','") + `')
143
+		AND s.type_id = ?
144
+	`
145
+
146
+	var users []UserCase
147
+	if err := m.db.SQL(query, models.STATUS_NORMAL, typeID).Find(&users); err != nil {
148
+		return nil, err
149
+	}
150
+
151
+	return users, nil
152
+}

+ 14
- 0
models/constant.go View File

69
 	// 推荐
69
 	// 推荐
70
 	ACCSOURCE_RECOMMEND = "recommend"
70
 	ACCSOURCE_RECOMMEND = "recommend"
71
 )
71
 )
72
+
73
+// 微信配置表
74
+const (
75
+	WECHAT_WX   = "wechat"
76
+	WECHAT_MINI = "mini"
77
+)
78
+
79
+// 人员类型
80
+const (
81
+	// 销售
82
+	USERTYPE_SALES = "sales"
83
+	// 主管
84
+	USERTYPE_MANAGER = "manager"
85
+)

+ 3
- 1
models/model/sys_wechat_conf.go View File

3
 type SysWechatConf struct {
3
 type SysWechatConf struct {
4
 	ConfId string `xorm:"VARCHAR(64)"`
4
 	ConfId string `xorm:"VARCHAR(64)"`
5
 	OrgId  string `xorm:"VARCHAR(64)"`
5
 	OrgId  string `xorm:"VARCHAR(64)"`
6
-	Type   int    `xorm:"comment('wechat 微信公众号 mini 小程序') SMALLINT(6)"`
6
+	Type   string `xorm:"comment('wechat 微信公众号 mini 小程序') VARCHAR(20)"`
7
 	Appid  string `xorm:"VARCHAR(50)"`
7
 	Appid  string `xorm:"VARCHAR(50)"`
8
 	Secret string `xorm:"VARCHAR(50)"`
8
 	Secret string `xorm:"VARCHAR(50)"`
9
 	Token  string `xorm:"VARCHAR(50)"`
9
 	Token  string `xorm:"VARCHAR(50)"`
10
 	Aeskey string `xorm:"VARCHAR(100)"`
10
 	Aeskey string `xorm:"VARCHAR(100)"`
11
 	Wxid   string `xorm:"VARCHAR(50)"`
11
 	Wxid   string `xorm:"VARCHAR(50)"`
12
+	Rmark  string `xorm:"TEXT"`
13
+	Status int    `xorm:"SMALLINT(6)"`
12
 }
14
 }

+ 12
- 1
models/sys.go View File

136
 	_, err := m.db.Cols(cols...).
136
 	_, err := m.db.Cols(cols...).
137
 		Where("account_type=?", user.AccountType).
137
 		Where("account_type=?", user.AccountType).
138
 		And("openid=?", user.Openid).
138
 		And("openid=?", user.Openid).
139
-		Update(&user)
139
+		Update(user)
140
 	return err
140
 	return err
141
 }
141
 }
142
 
142
 
154
 
154
 
155
 	return cs.CaseId, nil
155
 	return cs.CaseId, nil
156
 }
156
 }
157
+
158
+// GetWeChatConfig 获取微信配置
159
+func (m *SysDAO) GetWeChatConfig(org string) (*model.SysWechatConf, error) {
160
+	conf := new(model.SysWechatConf)
161
+
162
+	if _, err := m.db.Where("org_id=?", org).And("type=?", WECHAT_WX).Get(conf); err != nil {
163
+		return nil, err
164
+	}
165
+
166
+	return conf, nil
167
+}

+ 1
- 1
routers/guest.go View File

20
 		beego.NSRouter("/cms/news", &message.MessageController{}, "get:GetNewsByLocation"),
20
 		beego.NSRouter("/cms/news", &message.MessageController{}, "get:GetNewsByLocation"),
21
 
21
 
22
 		// 案场
22
 		// 案场
23
-		beego.NSRouter("/casearea", &cases.CaseController{}, "get:GetAreaByCase"),
23
+		beego.NSRouter("/case", &cases.CaseController{}, "get:GetOrgCases"),
24
 
24
 
25
 		// 验证码 获取, 校验
25
 		// 验证码 获取, 校验
26
 		beego.NSRouter("/captcha", &controllers.BaseController{}, "get:SendCaptcha"),
26
 		beego.NSRouter("/captcha", &controllers.BaseController{}, "get:SendCaptcha"),

+ 1
- 64
routers/wechat.go View File

1
 package routers
1
 package routers
2
 
2
 
3
 import (
3
 import (
4
-	"spaceofcheng/services/controllers"
5
 	"spaceofcheng/services/controllers/customer"
4
 	"spaceofcheng/services/controllers/customer"
6
-	"spaceofcheng/services/controllers/goods"
7
-	"spaceofcheng/services/controllers/message"
8
-	"spaceofcheng/services/controllers/user"
9
 
5
 
10
 	"github.com/astaxie/beego"
6
 	"github.com/astaxie/beego"
11
 )
7
 )
14
 	prefix := beego.AppConfig.String("api::wechat")
10
 	prefix := beego.AppConfig.String("api::wechat")
15
 
11
 
16
 	return beego.NSNamespace(prefix,
12
 	return beego.NSNamespace(prefix,
17
-		// 商品分类
18
-		beego.NSRouter("/type/goods", &goods.GoodsController{}, "get:GetGoodsType"),
19
-		beego.NSRouter("/type/goods/:typeid", &goods.GoodsController{}, "get:GetGoodsTypeByID"),
20
-		beego.NSRouter("/type/goods", &goods.GoodsController{}, "post:SaveGoodsType"),
21
-		beego.NSRouter("/type/goods/:typeid", &goods.GoodsController{}, "put:SaveGoodsType"),
22
-		beego.NSRouter("/type/goods/:typeid", &goods.GoodsController{}, "delete:DelGoodsType"),
23
-
24
-		// 商品规格
25
-		beego.NSRouter("/spec/goods", &goods.GoodsController{}, "get:GetGoodsSpec"),
26
-		beego.NSRouter("/spec/goods/:specid", &goods.GoodsController{}, "get:GetGoodsSpecByID"),
27
-		beego.NSRouter("/spec/goods", &goods.GoodsController{}, "post:SaveGoodsSpec"),
28
-		beego.NSRouter("/spec/goods/:specid", &goods.GoodsController{}, "put:SaveGoodsSpec"),
29
-		beego.NSRouter("/spec/goods/:specid", &goods.GoodsController{}, "delete:DelGoodsSpec"),
30
-
31
-		// 系统用户
32
-		beego.NSRouter("/user", &user.UserController{}, "get:GetUserList"),
33
-		beego.NSRouter("/user/:userid", &user.UserController{}, "get:GetUserByID"),
34
-		beego.NSRouter("/user/:userid/password", &user.UserController{}, "put:UpdatePassword"),
35
-		beego.NSRouter("/user/password/reset", &user.UserController{}, "put:ResetPassword"),
36
-		beego.NSRouter("/signout", &user.UserController{}, "post:SignOut"),
37
-
38
-		// cms 位置
39
-		beego.NSRouter("/cms/area", &message.MessageController{}, "get:GetLocations"),
40
-		beego.NSRouter("/cms/area/:locationid", &message.MessageController{}, "get:GetLocationById"),
41
-		beego.NSRouter("/cms/area", &message.MessageController{}, "post:SaveLocation"),
42
-		beego.NSRouter("/cms/area/:locationid", &message.MessageController{}, "put:SaveLocation"),
43
-		beego.NSRouter("/cms/area/:locationid", &message.MessageController{}, "delete:DelLocation"),
44
-
45
-		// cms
46
-		beego.NSRouter("/cms/info", &message.MessageController{}, "get:GetCmsInfoList"),
47
-		beego.NSRouter("/cms/info/:infoid", &message.MessageController{}, "get:GetCmsInfoByID"),
48
-		beego.NSRouter("/cms/info", &message.MessageController{}, "post:SaveCmsInfo"),
49
-		beego.NSRouter("/cms/info/:infoid", &message.MessageController{}, "put:SaveCmsInfo"),
50
-		beego.NSRouter("/cms/info/:infoid", &message.MessageController{}, "delete:DelCmsInfo"),
51
-
52
-		// cms 图片
53
-		beego.NSRouter("/cms/image", &message.MessageController{}, "get:GetImgList"),
54
-		beego.NSRouter("/cms/image/:imgid", &message.MessageController{}, "get:GetImgByID"),
55
-		beego.NSRouter("/cms/image", &message.MessageController{}, "post:SaveImage"),
56
-		beego.NSRouter("/cms/image/:imgid", &message.MessageController{}, "put:SaveImage"),
57
-		beego.NSRouter("/cms/image/:imgid", &message.MessageController{}, "delete:DelImg"),
58
-
59
-		// cms 消息
60
-		beego.NSRouter("/cms/news", &message.MessageController{}, "get:GetNews"),
61
-		beego.NSRouter("/cms/news/:newsid", &message.MessageController{}, "get:GetNewsByID"),
62
-		beego.NSRouter("/cms/news", &message.MessageController{}, "post:SaveNews"),
63
-		beego.NSRouter("/cms/news/:newsid", &message.MessageController{}, "put:SaveNews"),
64
-		beego.NSRouter("/cms/news/:newsid", &message.MessageController{}, "delete:DelNews"),
65
-
66
-		// cms 案场
67
-		beego.NSRouter("/cms/case", &message.MessageController{}, "get:GetCmsCase"),
68
-		beego.NSRouter("/cms/case/:cmscaseid", &message.MessageController{}, "get:GetCmsCaseByID"),
69
-		beego.NSRouter("/cms/case", &message.MessageController{}, "post:SaveCmsCase"),
70
-		beego.NSRouter("/cms/case/:cmscaseid", &message.MessageController{}, "put:SaveCmsCase"),
71
-		beego.NSRouter("/cms/case/:cmscaseid", &message.MessageController{}, "delete:DelCmsCase"),
72
-
73
-		// 文件
74
-		beego.NSRouter("/file", &controllers.BaseController{}, "post:FileUpload"),
75
-
76
 		// 会员
13
 		// 会员
77
-		beego.NSRouter("/customer", &customer.CustomerController{}, "get:CustWXList"),
14
+		beego.NSRouter("/customer", &customer.CustomerController{}, "get:GetCustWXByID"),
78
 	)
15
 	)
79
 }
16
 }

+ 27
- 0
service/cases/cases.go View File

1
 package cases
1
 package cases
2
 
2
 
3
 import (
3
 import (
4
+	"errors"
5
+	"spaceofcheng/services/models"
4
 	"spaceofcheng/services/models/cases"
6
 	"spaceofcheng/services/models/cases"
5
 	"spaceofcheng/services/models/model"
7
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/models/system"
8
 	"spaceofcheng/services/models/system"
96
 	err := s.dao.DelCase(caseid)
98
 	err := s.dao.DelCase(caseid)
97
 	return err
99
 	return err
98
 }
100
 }
101
+
102
+// GetAllCasesAndSales 获取所有案场
103
+func (s *CaseServ) GetAllCasesAndSales(org string) (map[string]interface{}, error) {
104
+	cs, err := s.dao.GetCaseByOrg(org)
105
+	if err != nil {
106
+		utils.LogError("获取案场列表失败: " + err.Error())
107
+		return nil, errors.New("获取案场列表失败")
108
+	}
109
+
110
+	csIDs := []string{}
111
+	for _, c := range cs {
112
+		csIDs = append(csIDs, c.CaseId)
113
+	}
114
+
115
+	users, err := s.dao.GetCaseUserByType(csIDs, models.USERTYPE_SALES)
116
+	if err != nil {
117
+		utils.LogError("获取案场销售失败: " + err.Error())
118
+		return nil, errors.New("获取案场销售失败")
119
+	}
120
+
121
+	return map[string]interface{}{
122
+		"cases": cs,
123
+		"sales": users,
124
+	}, nil
125
+}

+ 21
- 0
service/sys.go View File

2
 
2
 
3
 import (
3
 import (
4
 	"encoding/json"
4
 	"encoding/json"
5
+	"errors"
5
 	"spaceofcheng/services/models"
6
 	"spaceofcheng/services/models"
6
 	"spaceofcheng/services/models/model"
7
 	"spaceofcheng/services/models/model"
7
 	"spaceofcheng/services/utils"
8
 	"spaceofcheng/services/utils"
128
 
129
 
129
 	return &userMapping, nil
130
 	return &userMapping, nil
130
 }
131
 }
132
+
133
+// GetWeChatConfig 获取微信配置
134
+func (s SysServ) GetWeChatConfig(org string) (map[string]string, error) {
135
+	conf, err := s.dao.GetWeChatConfig(org)
136
+	if err != nil {
137
+		return nil, err
138
+	}
139
+
140
+	if conf.ConfId == "" {
141
+		return nil, errors.New("未找到微信配置")
142
+	}
143
+
144
+	return map[string]string{
145
+		"appid":  conf.Appid,
146
+		"secret": conf.Secret,
147
+		"token":  conf.Token,
148
+		"aeskey": conf.Aeskey,
149
+		"wxid":   conf.Wxid,
150
+	}, nil
151
+}

BIN
swagger.zip View File