zjxpcyc 6 년 전
부모
커밋
c12c1386dc
14개의 변경된 파일173개의 추가작업 그리고 80개의 파일을 삭제
  1. 2
    2
      conf/db.conf
  2. 28
    2
      controllers/auth.go
  3. 16
    0
      controllers/cases/case.go
  4. 0
    9
      controllers/config.go
  5. 5
    0
      log/common.log
  6. 43
    0
      models/cases/cases.go
  7. 14
    0
      models/constant.go
  8. 3
    1
      models/model/sys_wechat_conf.go
  9. 12
    1
      models/sys.go
  10. 1
    1
      routers/guest.go
  11. 1
    64
      routers/wechat.go
  12. 27
    0
      service/cases/cases.go
  13. 21
    0
      service/sys.go
  14. BIN
      swagger.zip

+ 2
- 2
conf/db.conf 파일 보기

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

+ 28
- 2
controllers/auth.go 파일 보기

@@ -75,12 +75,26 @@ func (c *BaseController) authWechat(serv *service.SysServ) {
75 75
 	// 用户微信信息
76 76
 	var wxDetail map[string]interface{}
77 77
 	detailRaw := c.GetSession("wechat_user")
78
+
78 79
 	if detailRaw != nil {
79 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 95
 	if custID == "" && wxDetail == nil {
83
-		wxDetail = c.getWechatDetail()
96
+		wxDetail = c.getWechatDetail(serv)
97
+
84 98
 		c.SetSession("wechat_user", wxDetail)
85 99
 	}
86 100
 
@@ -148,16 +162,28 @@ func (c *BaseController) needAuth() bool {
148 162
 }
149 163
 
150 164
 // getWechatDetail 获取微信个人信息详情
151
-func (c *BaseController) getWechatDetail() map[string]interface{} {
165
+func (c *BaseController) getWechatDetail(serv *service.SysServ) map[string]interface{} {
152 166
 	// 微信 code
153 167
 	code := c.GetString("code")
154 168
 	if code == "" {
155 169
 		c.ResponseError(
156 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 182
 			http.StatusBadRequest,
158 183
 		)
159 184
 	}
160 185
 
186
+	utils.InitWeChatClient(conf)
161 187
 	usr, err := utils.GetWxUserInfo(code)
162 188
 	if err != nil {
163 189
 		c.ResponseError(

+ 16
- 0
controllers/cases/case.go 파일 보기

@@ -1,6 +1,7 @@
1 1
 package cases
2 2
 
3 3
 import (
4
+	"errors"
4 5
 	"spaceofcheng/services/controllers"
5 6
 	"spaceofcheng/services/models/model"
6 7
 	"spaceofcheng/services/service/cases"
@@ -66,3 +67,18 @@ func (c *CaseController) DelCase() {
66 67
 	}
67 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 파일 보기

@@ -24,15 +24,6 @@ func (c *BaseController) initConfig() {
24 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 28
 	smsConf := c.getConfig("conf/sms.conf")
38 29
 	if smsConf != nil {

+ 5
- 0
log/common.log 파일 보기

@@ -20,3 +20,8 @@
20 20
 2018/08/21 13:41:04 [E] 您没有该案场的权限!
21 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 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 파일 보기

@@ -107,3 +107,46 @@ func (m *CaseDAO) DelCase(caseid string) error {
107 107
 	_, err := m.db.Cols(cols...).Where("case_id=?", caseid).Update(caseinfo)
108 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 파일 보기

@@ -69,3 +69,17 @@ const (
69 69
 	// 推荐
70 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 파일 보기

@@ -3,10 +3,12 @@ package model
3 3
 type SysWechatConf struct {
4 4
 	ConfId string `xorm:"VARCHAR(64)"`
5 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 7
 	Appid  string `xorm:"VARCHAR(50)"`
8 8
 	Secret string `xorm:"VARCHAR(50)"`
9 9
 	Token  string `xorm:"VARCHAR(50)"`
10 10
 	Aeskey string `xorm:"VARCHAR(100)"`
11 11
 	Wxid   string `xorm:"VARCHAR(50)"`
12
+	Rmark  string `xorm:"TEXT"`
13
+	Status int    `xorm:"SMALLINT(6)"`
12 14
 }

+ 12
- 1
models/sys.go 파일 보기

@@ -136,7 +136,7 @@ func (m *SysDAO) UpdateUserMapping(user *model.TaUserMapping) error {
136 136
 	_, err := m.db.Cols(cols...).
137 137
 		Where("account_type=?", user.AccountType).
138 138
 		And("openid=?", user.Openid).
139
-		Update(&user)
139
+		Update(user)
140 140
 	return err
141 141
 }
142 142
 
@@ -154,3 +154,14 @@ func GetCaseByContext(ctx *utils.Context) (string, error) {
154 154
 
155 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 파일 보기

@@ -20,7 +20,7 @@ func getGuestRoutes() beego.LinkNamespace {
20 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 26
 		beego.NSRouter("/captcha", &controllers.BaseController{}, "get:SendCaptcha"),

+ 1
- 64
routers/wechat.go 파일 보기

@@ -1,11 +1,7 @@
1 1
 package routers
2 2
 
3 3
 import (
4
-	"spaceofcheng/services/controllers"
5 4
 	"spaceofcheng/services/controllers/customer"
6
-	"spaceofcheng/services/controllers/goods"
7
-	"spaceofcheng/services/controllers/message"
8
-	"spaceofcheng/services/controllers/user"
9 5
 
10 6
 	"github.com/astaxie/beego"
11 7
 )
@@ -14,66 +10,7 @@ func getWechatRoutes() beego.LinkNamespace {
14 10
 	prefix := beego.AppConfig.String("api::wechat")
15 11
 
16 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 파일 보기

@@ -1,6 +1,8 @@
1 1
 package cases
2 2
 
3 3
 import (
4
+	"errors"
5
+	"spaceofcheng/services/models"
4 6
 	"spaceofcheng/services/models/cases"
5 7
 	"spaceofcheng/services/models/model"
6 8
 	"spaceofcheng/services/models/system"
@@ -96,3 +98,28 @@ func (s *CaseServ) DelCase(caseid string) error {
96 98
 	err := s.dao.DelCase(caseid)
97 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 파일 보기

@@ -2,6 +2,7 @@ package service
2 2
 
3 3
 import (
4 4
 	"encoding/json"
5
+	"errors"
5 6
 	"spaceofcheng/services/models"
6 7
 	"spaceofcheng/services/models/model"
7 8
 	"spaceofcheng/services/utils"
@@ -128,3 +129,23 @@ func (s *SysServ) CheckWechatUserMapping(user map[string]interface{}) (*model.Ta
128 129
 
129 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 파일 보기