正在显示
48 个修改的文件
包含
4458 行增加
和
71 行删除
controllers/achievement.go
0 → 100644
1 | +package controllers | ||
2 | + | ||
3 | +import ( | ||
4 | + "encoding/json" | ||
5 | + "fmt" | ||
6 | + "oppmg/common/log" | ||
7 | + "oppmg/models" | ||
8 | + "oppmg/protocol" | ||
9 | + serveachievement "oppmg/services/achievement" | ||
10 | + | ||
11 | + "github.com/astaxie/beego/orm" | ||
12 | +) | ||
13 | + | ||
14 | +type AchievementController struct { | ||
15 | + BaseController | ||
16 | +} | ||
17 | + | ||
18 | +//AchievementList 成果列表 | ||
19 | +//@router /achievement/list | ||
20 | +func (c AchievementController) AchievementList() { | ||
21 | + var msg *protocol.ResponseMessage | ||
22 | + defer func() { | ||
23 | + c.ResposeJson(msg) | ||
24 | + }() | ||
25 | + type Parameter struct { | ||
26 | + protocol.RequestPageInfo | ||
27 | + Status int `json:"status"` | ||
28 | + } | ||
29 | + var param Parameter | ||
30 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
31 | + log.Error("json 解析失败 err:%s", err) | ||
32 | + msg = protocol.BadRequestParam("1") | ||
33 | + return | ||
34 | + } | ||
35 | + companyid := c.GetCompanyId() | ||
36 | + rspdata := serveachievement.GetAchievementList(param.PageIndex, param.PageSize, companyid, param.Status) | ||
37 | + msg = protocol.NewPageDataResponse(rspdata, nil) | ||
38 | + return | ||
39 | +} | ||
40 | + | ||
41 | +//AddAchievement 添加成果列表 | ||
42 | +//@router /achievement/add | ||
43 | +func (c AchievementController) AddAchievement() { | ||
44 | + var msg *protocol.ResponseMessage | ||
45 | + defer func() { | ||
46 | + c.ResposeJson(msg) | ||
47 | + }() | ||
48 | + | ||
49 | + var param protocol.RequestAddAchievement | ||
50 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
51 | + log.Error("json 解析失败 err:%s", err) | ||
52 | + msg = protocol.BadRequestParam("1") | ||
53 | + return | ||
54 | + } | ||
55 | + if len(param.ChanceData) == 0 { | ||
56 | + log.Error("len(param.ChanceData) == 0 ") | ||
57 | + msg = protocol.BadRequestParam("10109") | ||
58 | + return | ||
59 | + } | ||
60 | + if param.ChanceTypeId == 0 { | ||
61 | + log.Error(" param.ChanceTypeId == 0 ") | ||
62 | + msg = protocol.BadRequestParam("10108") | ||
63 | + return | ||
64 | + } | ||
65 | + if param.GraspScore < 0 || param.GraspScore > 100 { | ||
66 | + log.Error(" param.GraspScore < 0 || param.GraspScore > 100 ") | ||
67 | + msg = protocol.BadRequestParam("10121") | ||
68 | + return | ||
69 | + } | ||
70 | + if param.UserGraspScore < 0 || param.UserGraspScore > 100 { | ||
71 | + log.Error("param.UserGraspScore < 0 || param.UserGraspScore > 100") | ||
72 | + msg = protocol.BadRequestParam("10122") | ||
73 | + } | ||
74 | + var providerScore float64 | ||
75 | + for _, v := range param.Provider { | ||
76 | + providerScore += v.UserGraspScore | ||
77 | + } | ||
78 | + remainScore := param.GraspScore - param.UserGraspScore - providerScore | ||
79 | + if remainScore < 0 { | ||
80 | + log.Error("分配的总分不可大于把握分") | ||
81 | + msg = protocol.BadRequestParam("10122") | ||
82 | + return | ||
83 | + } | ||
84 | + | ||
85 | + companyid := c.GetCompanyId() | ||
86 | + err := serveachievement.AddAchievement(¶m, companyid) | ||
87 | + msg = protocol.NewReturnResponse(nil, err) | ||
88 | + return | ||
89 | +} | ||
90 | + | ||
91 | +//EditAchievement 编辑成果 | ||
92 | +//@router /achievement/edit | ||
93 | +func (c AchievementController) EditAchievement() { | ||
94 | + var msg *protocol.ResponseMessage | ||
95 | + defer func() { | ||
96 | + c.ResposeJson(msg) | ||
97 | + }() | ||
98 | + var param protocol.RequestEditAchievement | ||
99 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
100 | + log.Error("json 解析失败 err:%s", err) | ||
101 | + msg = protocol.BadRequestParam("1") | ||
102 | + return | ||
103 | + } | ||
104 | + if len(param.ChanceData) == 0 { | ||
105 | + log.Error("len(param.ChanceData) == 0 ") | ||
106 | + msg = protocol.BadRequestParam("10109") | ||
107 | + return | ||
108 | + } | ||
109 | + if param.ChanceTypeId == 0 { | ||
110 | + log.Error(" param.ChanceTypeId == 0 ") | ||
111 | + msg = protocol.BadRequestParam("10108") | ||
112 | + return | ||
113 | + } | ||
114 | + if param.GraspScore < 0 || param.GraspScore > 100 { | ||
115 | + log.Error(" param.GraspScore < 0 || param.GraspScore > 100 ") | ||
116 | + msg = protocol.BadRequestParam("10121") | ||
117 | + return | ||
118 | + } | ||
119 | + if param.UserGraspScore < 0 || param.UserGraspScore > 100 { | ||
120 | + log.Error("param.UserGraspScore < 0 || param.UserGraspScore > 100") | ||
121 | + msg = protocol.BadRequestParam("10122") | ||
122 | + } | ||
123 | + var providerScore float64 | ||
124 | + for _, v := range param.Provider { | ||
125 | + providerScore += v.UserGraspScore | ||
126 | + } | ||
127 | + remainScore := param.GraspScore - param.UserGraspScore - providerScore | ||
128 | + if remainScore < 0 { | ||
129 | + log.Error("分配的总分不可大于把握分") | ||
130 | + msg = protocol.BadRequestParam("10122") | ||
131 | + return | ||
132 | + } | ||
133 | + companyid := c.GetCompanyId() | ||
134 | + err := serveachievement.EditAchievement(¶m, companyid) | ||
135 | + msg = protocol.NewReturnResponse(nil, err) | ||
136 | + return | ||
137 | +} | ||
138 | + | ||
139 | +//EditAchievement 成果详情 | ||
140 | +//@router /achievement/info | ||
141 | +func (c AchievementController) AchievementInfo() { | ||
142 | + var msg *protocol.ResponseMessage | ||
143 | + defer func() { | ||
144 | + c.ResposeJson(msg) | ||
145 | + }() | ||
146 | + type Parameter struct { | ||
147 | + Id int64 `json:"id"` | ||
148 | + } | ||
149 | + var param Parameter | ||
150 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
151 | + log.Error("json 解析失败 err:%s", err) | ||
152 | + msg = protocol.BadRequestParam("1") | ||
153 | + return | ||
154 | + } | ||
155 | + companyid := c.GetCompanyId() | ||
156 | + rspData := serveachievement.GetAchievementInfo(param.Id, companyid) | ||
157 | + msg = protocol.NewReturnResponse(rspData, nil) | ||
158 | + return | ||
159 | +} | ||
160 | + | ||
161 | +//EditAchievement 删除成果 | ||
162 | +//@router /achievement/delete | ||
163 | +func (c AchievementController) DeleteAchievement() { | ||
164 | + var msg *protocol.ResponseMessage | ||
165 | + defer func() { | ||
166 | + c.ResposeJson(msg) | ||
167 | + }() | ||
168 | + type Parameter struct { | ||
169 | + Id int64 `json:"id"` | ||
170 | + } | ||
171 | + var param Parameter | ||
172 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
173 | + log.Error("json 解析失败 err:%s", err) | ||
174 | + msg = protocol.BadRequestParam("1") | ||
175 | + return | ||
176 | + } | ||
177 | + companyid := c.GetCompanyId() | ||
178 | + var ( | ||
179 | + err error | ||
180 | + achievementData *models.Achievement | ||
181 | + ) | ||
182 | + achievementData, err = models.GetAchievementById(param.Id) | ||
183 | + if err != nil { | ||
184 | + log.Error("获取achievement数据失败:%s", err) | ||
185 | + msg = protocol.BadRequestParam("1") | ||
186 | + return | ||
187 | + } | ||
188 | + if achievementData.CompanyId != companyid { | ||
189 | + log.Error("achievement数据公司不匹配") | ||
190 | + msg = protocol.BadRequestParam("1") | ||
191 | + return | ||
192 | + } | ||
193 | + achievementData.Status = models.ACHIEVEMENT_STATUS_DEL | ||
194 | + o := orm.NewOrm() | ||
195 | + o.Begin() | ||
196 | + err = models.UpdateAchievementById(achievementData, []string{"Status"}) | ||
197 | + if err != nil { | ||
198 | + o.Rollback() | ||
199 | + log.Error("更新achievement数据失败:%s", err) | ||
200 | + } | ||
201 | + err = models.IncreaseAchevementScore(companyid, -achievementData.GraspScoreRemain, o) | ||
202 | + if err != nil { | ||
203 | + o.Rollback() | ||
204 | + log.Error("更新福利池失败数据失败:%s", err) | ||
205 | + } | ||
206 | + o.Commit() | ||
207 | + msg = protocol.NewReturnResponse(nil, nil) | ||
208 | + return | ||
209 | +} | ||
210 | + | ||
211 | +//EditAchievement 显示隐藏成果 | ||
212 | +//@router /achievement/forbid_allow | ||
213 | +func (c AchievementController) ForbidAllowAchievement() { | ||
214 | + var msg *protocol.ResponseMessage | ||
215 | + defer func() { | ||
216 | + c.ResposeJson(msg) | ||
217 | + }() | ||
218 | + type Parameter struct { | ||
219 | + Id int64 `json:"id"` | ||
220 | + Status int8 `json:"status"` //[1:显示][2:隐藏] | ||
221 | + } | ||
222 | + var param Parameter | ||
223 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
224 | + log.Error("json 解析失败 err:%s", err) | ||
225 | + msg = protocol.BadRequestParam("1") | ||
226 | + return | ||
227 | + } | ||
228 | + if param.Status != 1 && param.Status != 2 { | ||
229 | + msg = protocol.BadRequestParam("1") | ||
230 | + return | ||
231 | + } | ||
232 | + companyid := c.GetCompanyId() | ||
233 | + var ( | ||
234 | + err error | ||
235 | + achievementData *models.Achievement | ||
236 | + ) | ||
237 | + achievementData, err = models.GetAchievementById(param.Id) | ||
238 | + if err != nil { | ||
239 | + log.Error("获取achievement数据失败:%s", err) | ||
240 | + msg = protocol.BadRequestParam("1") | ||
241 | + return | ||
242 | + } | ||
243 | + if achievementData.CompanyId != companyid { | ||
244 | + log.Error("achievement数据公司不匹配") | ||
245 | + msg = protocol.BadRequestParam("1") | ||
246 | + return | ||
247 | + } | ||
248 | + | ||
249 | + achievementData.Status = param.Status | ||
250 | + err = models.UpdateAchievementById(achievementData, []string{"Status"}) | ||
251 | + if err != nil { | ||
252 | + log.Error("更新achievement数据失败:%s", err) | ||
253 | + } | ||
254 | + msg = protocol.NewReturnResponse(nil, nil) | ||
255 | + return | ||
256 | +} | ||
257 | + | ||
258 | +//AchievementScoreRemain 获取福利池分数 | ||
259 | +//@router /achievement/remain/score | ||
260 | +func (c AchievementController) AchievementScoreRemain() { | ||
261 | + var msg *protocol.ResponseMessage | ||
262 | + defer func() { | ||
263 | + c.ResposeJson(msg) | ||
264 | + }() | ||
265 | + companyid := c.GetCompanyId() | ||
266 | + scoreData, err := models.GetAchevementScoreByCompanyId(companyid) | ||
267 | + rspData := map[string]string{ | ||
268 | + "score": "0", | ||
269 | + } | ||
270 | + if err == nil { | ||
271 | + rspData["score"] = fmt.Sprintf("%.1f", scoreData.GraspScoreRemain) | ||
272 | + } | ||
273 | + msg = protocol.NewReturnResponse(rspData, nil) | ||
274 | + return | ||
275 | +} |
@@ -142,3 +142,29 @@ func (c *AuditController) AllowForbidAudit() { | @@ -142,3 +142,29 @@ func (c *AuditController) AllowForbidAudit() { | ||
142 | msg = protocol.NewReturnResponse(nil, err) | 142 | msg = protocol.NewReturnResponse(nil, err) |
143 | return | 143 | return |
144 | } | 144 | } |
145 | + | ||
146 | +//GetChanceReviseLog | ||
147 | +//@router /v1/audit/revise/info | ||
148 | +func (c *AuditController) GetChanceReviseLog() { | ||
149 | + var msg *protocol.ResponseMessage | ||
150 | + defer func() { | ||
151 | + c.ResposeJson(msg) | ||
152 | + }() | ||
153 | + type Parameter struct { | ||
154 | + FlowLogId int64 `json:"flow_log_id"` | ||
155 | + ChanceId string `json:"chance_id"` | ||
156 | + } | ||
157 | + var param Parameter | ||
158 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
159 | + log.Error("json 解析失败", err) | ||
160 | + msg = protocol.BadRequestParam("1") | ||
161 | + return | ||
162 | + } | ||
163 | + chanceId, _ := strconv.ParseInt(param.ChanceId, 10, 64) | ||
164 | + companyId := c.GetCompanyId() | ||
165 | + rspData, err := serveaudit.GetChanceReviseLog(param.FlowLogId, chanceId, companyId) | ||
166 | + msg = protocol.NewReturnResponse(rspData, err) | ||
167 | + return | ||
168 | +} | ||
169 | + | ||
170 | +// GetChanceReviseLog |
@@ -134,6 +134,49 @@ func (c *AuthController) LoginSms() { | @@ -134,6 +134,49 @@ func (c *AuthController) LoginSms() { | ||
134 | return | 134 | return |
135 | } | 135 | } |
136 | 136 | ||
137 | +// LoginSecret 使用秘钥进行登录 | ||
138 | +// @router /login [post] | ||
139 | +func (c *AuthController) LoginSecretKey() { | ||
140 | + var msg *protocol.ResponseMessage | ||
141 | + defer func() { | ||
142 | + c.ResposeJson(msg) | ||
143 | + }() | ||
144 | + type Parameter struct { | ||
145 | + Secret string `json:"secret"` | ||
146 | + } | ||
147 | + var param Parameter | ||
148 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
149 | + log.Error("json 解析失败", err) | ||
150 | + msg = protocol.BadRequestParam("1") | ||
151 | + return | ||
152 | + } | ||
153 | + if len(param.Secret) == 0 { | ||
154 | + msg = protocol.BadRequestParam("10080") | ||
155 | + return | ||
156 | + } | ||
157 | + logintoken, err := serveauth.LoginAuthBySecretKey(param.Secret) | ||
158 | + if err != nil { | ||
159 | + msg = &protocol.ResponseMessage{ | ||
160 | + Errno: -1, | ||
161 | + Errmsg: err.Error(), | ||
162 | + } | ||
163 | + return | ||
164 | + } | ||
165 | + err = serveauth.ResetLoginToken(logintoken) | ||
166 | + if err != nil { | ||
167 | + log.Error("token 信息记录数据库失败") | ||
168 | + } | ||
169 | + err = serveauth.ResetLoginTokenRedis(logintoken) | ||
170 | + if err != nil { | ||
171 | + log.Error("token 信息记录redis失败") | ||
172 | + } | ||
173 | + data := protocol.ResponseLogin{ | ||
174 | + Access: logintoken, | ||
175 | + } | ||
176 | + msg = protocol.NewReturnResponse(data, nil) | ||
177 | + return | ||
178 | +} | ||
179 | + | ||
137 | //SmsCode 发送验证码短信 | 180 | //SmsCode 发送验证码短信 |
138 | //@router /auth/smscode | 181 | //@router /auth/smscode |
139 | func (c *AuthController) SmsCode() { | 182 | func (c *AuthController) SmsCode() { |
@@ -183,3 +183,66 @@ func (c *CommonController) SelectorRoleUser() { | @@ -183,3 +183,66 @@ func (c *CommonController) SelectorRoleUser() { | ||
183 | msg = protocol.NewReturnResponse(list, err) | 183 | msg = protocol.NewReturnResponse(list, err) |
184 | return | 184 | return |
185 | } | 185 | } |
186 | + | ||
187 | +//SelectorChanceType 获取机会类型列表 | ||
188 | +func (c *CommonController) SelectorChanceType() { | ||
189 | + var msg *protocol.ResponseMessage | ||
190 | + defer func() { | ||
191 | + c.ResposeJson(msg) | ||
192 | + }() | ||
193 | + | ||
194 | + companyid := c.GetCompanyId() | ||
195 | + templatelist := servecommon.SelectGetTemplateList(companyid) | ||
196 | + chanceTypeList := servecommon.SeleteGetChanceTypeList(companyid) | ||
197 | + data := map[string]interface{}{ | ||
198 | + "template": templatelist, | ||
199 | + "chance_type": chanceTypeList, | ||
200 | + } | ||
201 | + msg = protocol.NewReturnResponse(data, nil) | ||
202 | + return | ||
203 | +} | ||
204 | + | ||
205 | +//SelectCompanyUserList 下拉选择框 获取公司成员列表 | ||
206 | +func (c *CommonController) SelectCompanyUserList() { | ||
207 | + var msg *protocol.ResponseMessage | ||
208 | + defer func() { | ||
209 | + c.ResposeJson(msg) | ||
210 | + }() | ||
211 | + type Parameter struct { | ||
212 | + protocol.RequestPageInfo | ||
213 | + UserName string `json:"user_name"` | ||
214 | + } | ||
215 | + var param Parameter | ||
216 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
217 | + log.Error("json 解析失败 err:%s", err) | ||
218 | + msg = protocol.BadRequestParam("1") | ||
219 | + return | ||
220 | + } | ||
221 | + companyid := c.GetCompanyId() | ||
222 | + listData := servecommon.SelectCompanyUserList(param.PageIndex, param.PageSize, companyid, param.UserName) | ||
223 | + msg = protocol.NewPageDataResponse(listData, nil) | ||
224 | + return | ||
225 | +} | ||
226 | + | ||
227 | +//SelectChanceList 下拉选择框 获取机会列表 | ||
228 | +func (c *CommonController) SelectChanceList() { | ||
229 | + var msg *protocol.ResponseMessage | ||
230 | + defer func() { | ||
231 | + c.ResposeJson(msg) | ||
232 | + }() | ||
233 | + type Parameter struct { | ||
234 | + protocol.RequestPageInfo | ||
235 | + SearchType int `json:"search_type"` //1:根据机会编码搜索 2:根据提交人搜索 | ||
236 | + ChanceCode string `json:"chance_code"` | ||
237 | + } | ||
238 | + var param Parameter | ||
239 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
240 | + log.Error("json 解析失败 err:%s", err) | ||
241 | + msg = protocol.BadRequestParam("1") | ||
242 | + return | ||
243 | + } | ||
244 | + companyid := c.GetCompanyId() | ||
245 | + listData := servecommon.SelectChanceList(param.PageIndex, param.PageSize, companyid, param.SearchType, param.ChanceCode) | ||
246 | + msg = protocol.NewPageDataResponse(listData, nil) | ||
247 | + return | ||
248 | +} |
controllers/platform.go
0 → 100644
1 | +package controllers | ||
2 | + | ||
3 | +import ( | ||
4 | + "encoding/json" | ||
5 | + "fmt" | ||
6 | + "oppmg/common/log" | ||
7 | + "oppmg/protocol" | ||
8 | + "oppmg/services/platform" | ||
9 | +) | ||
10 | + | ||
11 | +type PlatformController struct { | ||
12 | + BaseController | ||
13 | +} | ||
14 | + | ||
15 | +// | ||
16 | +func (c PlatformController) UpdateData() { | ||
17 | + defer func() { | ||
18 | + c.Data["json"] = map[string]interface{}{ | ||
19 | + "code": 0, | ||
20 | + "msg": "ok", | ||
21 | + } | ||
22 | + c.ServeJSON() | ||
23 | + }() | ||
24 | + var param platform.CommonProtocol | ||
25 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
26 | + log.Error("json 解析失败 err:%s", err) | ||
27 | + return | ||
28 | + } | ||
29 | + m, err := platform.NewPlatformAction(param.Module) | ||
30 | + if err != nil { | ||
31 | + log.Error("同步数据发生错误,err%s", err) | ||
32 | + return | ||
33 | + } | ||
34 | + bt, err := json.Marshal(param.Data) | ||
35 | + if err != nil { | ||
36 | + log.Error("解析param.data数据失败") | ||
37 | + } | ||
38 | + err = m.DoAction(param.Action, bt) | ||
39 | + if err != nil { | ||
40 | + log.Error("同步数据发生错误,module=%s,action=%s,err:%s", param.Module, param.Action, err) | ||
41 | + } | ||
42 | + return | ||
43 | +} | ||
44 | + | ||
45 | +func (c PlatformController) CompanyAdminChance() { | ||
46 | + type Parameter struct { | ||
47 | + CompanyId int64 `json:"company_id"` | ||
48 | + Phone string `json:"phone"` | ||
49 | + } | ||
50 | + var msg = protocol.ErrWithMessage{} | ||
51 | + var param Parameter | ||
52 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
53 | + e := fmt.Errorf("json 解析失败 err:%s", err) | ||
54 | + log.Error(e.Error()) | ||
55 | + msg.Errmsg = e.Error() | ||
56 | + return | ||
57 | + } | ||
58 | + err := platform.AdminChance(param.CompanyId, param.Phone) | ||
59 | + if err != nil { | ||
60 | + log.Error("总后台调用CompanyAdminChance发生错误;%s", err) | ||
61 | + msg.Errmsg = err.Error() | ||
62 | + } | ||
63 | + c.Data["json"] = msg | ||
64 | + c.ServeJSON() | ||
65 | + return | ||
66 | +} |
controllers/rank.go
0 → 100644
1 | +package controllers | ||
2 | + | ||
3 | +import ( | ||
4 | + "encoding/json" | ||
5 | + "fmt" | ||
6 | + "oppmg/common/log" | ||
7 | + "oppmg/models" | ||
8 | + "oppmg/protocol" | ||
9 | + serverank "oppmg/services/rank" | ||
10 | + "strings" | ||
11 | + "time" | ||
12 | +) | ||
13 | + | ||
14 | +type RankController struct { | ||
15 | + BaseController | ||
16 | +} | ||
17 | + | ||
18 | +//GetRankType 榜单类型列表 | ||
19 | +//@router /rank/list | ||
20 | +func (c RankController) GetRankType() { | ||
21 | + var msg *protocol.ResponseMessage | ||
22 | + defer func() { | ||
23 | + c.ResposeJson(msg) | ||
24 | + }() | ||
25 | + companyid := c.GetCompanyId() | ||
26 | + rspData := serverank.GetRankList(companyid) | ||
27 | + msg = protocol.NewReturnResponse(rspData, nil) | ||
28 | + return | ||
29 | +} | ||
30 | + | ||
31 | +//EditRankType 榜单类型列表添加 | ||
32 | +//@router /rank/edit | ||
33 | +func (c RankController) EditRankType() { | ||
34 | + var msg *protocol.ResponseMessage | ||
35 | + defer func() { | ||
36 | + c.ResposeJson(msg) | ||
37 | + }() | ||
38 | + type Parameter struct { | ||
39 | + Id int64 `json:"id"` | ||
40 | + Name string `json:"name"` | ||
41 | + } | ||
42 | + var param Parameter | ||
43 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
44 | + log.Error("json 解析失败 err:%s", err) | ||
45 | + msg = protocol.BadRequestParam("1") | ||
46 | + return | ||
47 | + } | ||
48 | + param.Name = strings.TrimSpace(param.Name) | ||
49 | + n := []rune(param.Name) | ||
50 | + if len(n) > 5 || len(n) == 0 { | ||
51 | + msg = protocol.BadRequestParam("10103") | ||
52 | + return | ||
53 | + } | ||
54 | + companyid := c.GetCompanyId() | ||
55 | + err := serverank.UpdateRankType(param.Id, param.Name, companyid) | ||
56 | + msg = protocol.NewReturnResponse(nil, err) | ||
57 | + return | ||
58 | +} | ||
59 | + | ||
60 | +//EditRankType ... | ||
61 | +//@router /rank/forbid_allow | ||
62 | +func (c RankController) RankTypeForbidAllow() { | ||
63 | + var msg *protocol.ResponseMessage | ||
64 | + defer func() { | ||
65 | + c.ResposeJson(msg) | ||
66 | + }() | ||
67 | + type Parameter struct { | ||
68 | + Id int64 `json:"id"` | ||
69 | + Status int `json:"status"` | ||
70 | + } | ||
71 | + var param Parameter | ||
72 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
73 | + log.Error("json 解析失败 err:%s", err) | ||
74 | + msg = protocol.BadRequestParam("1") | ||
75 | + return | ||
76 | + } | ||
77 | + var err error | ||
78 | + companyid := c.GetCompanyId() | ||
79 | + switch param.Status { | ||
80 | + case 1: | ||
81 | + err = serverank.ForbidRank(param.Id, companyid) | ||
82 | + case 2: | ||
83 | + err = serverank.AllowRank(param.Id, companyid) | ||
84 | + default: | ||
85 | + err = protocol.NewErrWithMessage("1") | ||
86 | + } | ||
87 | + msg = protocol.NewReturnResponse(nil, err) | ||
88 | + return | ||
89 | +} | ||
90 | + | ||
91 | +//RankSeasonList 赛季列表 | ||
92 | +//@router /rank/season/list | ||
93 | +func (c RankController) RankSeasonList() { | ||
94 | + var msg *protocol.ResponseMessage | ||
95 | + defer func() { | ||
96 | + c.ResposeJson(msg) | ||
97 | + }() | ||
98 | + type Parameter struct { | ||
99 | + protocol.RequestPageInfo | ||
100 | + RankTypeId int64 `json:"rank_type_id"` | ||
101 | + } | ||
102 | + var param Parameter | ||
103 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
104 | + log.Error("json 解析失败 err:%s", err) | ||
105 | + msg = protocol.BadRequestParam("1") | ||
106 | + return | ||
107 | + } | ||
108 | + companyid := c.GetCompanyId() | ||
109 | + rspData, err := serverank.RankSeasonList(param.PageIndex, param.PageSize, param.RankTypeId, companyid) | ||
110 | + msg = protocol.NewPageDataResponse(rspData, err) | ||
111 | + return | ||
112 | +} | ||
113 | + | ||
114 | +//RankSeasonAdd 赛季列表添加 | ||
115 | +//@router /rank/season/add | ||
116 | +func (c RankController) RankSeasonAdd() { | ||
117 | + var msg *protocol.ResponseMessage | ||
118 | + defer func() { | ||
119 | + c.ResposeJson(msg) | ||
120 | + }() | ||
121 | + type Parameter struct { | ||
122 | + RankTypeId int64 `json:"rank_type_id"` | ||
123 | + Name string `json:"name"` | ||
124 | + BeginTime string `json:"begin_time"` | ||
125 | + EndTime string `json:"end_time"` | ||
126 | + } | ||
127 | + var param Parameter | ||
128 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
129 | + log.Error("json 解析失败 err:%s", err) | ||
130 | + msg = protocol.BadRequestParam("1") | ||
131 | + return | ||
132 | + } | ||
133 | + param.Name = strings.TrimSpace(param.Name) | ||
134 | + if len(param.Name) == 0 { | ||
135 | + msg = protocol.BadRequestParam("10104") | ||
136 | + return | ||
137 | + } | ||
138 | + param.BeginTime = strings.TrimSpace(param.BeginTime) | ||
139 | + if len(param.BeginTime) == 0 { | ||
140 | + msg = protocol.BadRequestParam("10105") | ||
141 | + return | ||
142 | + } | ||
143 | + param.EndTime = strings.TrimSpace(param.EndTime) | ||
144 | + if len(param.EndTime) == 0 { | ||
145 | + msg = protocol.BadRequestParam("10106") | ||
146 | + return | ||
147 | + } | ||
148 | + var ( | ||
149 | + beginTime int64 | ||
150 | + endTime int64 | ||
151 | + ) | ||
152 | + t1, err := time.ParseInLocation("2006-01-02", param.BeginTime, time.Local) | ||
153 | + if err != nil { | ||
154 | + msg = protocol.BadRequestParam("10105") | ||
155 | + return | ||
156 | + } | ||
157 | + beginTime = t1.Unix() | ||
158 | + t2, err := time.ParseInLocation("2006-01-02", param.EndTime, time.Local) | ||
159 | + if err != nil { | ||
160 | + msg = protocol.BadRequestParam("10106") | ||
161 | + return | ||
162 | + } | ||
163 | + endTime = t2.Unix() + 86399 //60*60*24-1 | ||
164 | + if beginTime > endTime { | ||
165 | + msg = protocol.BadRequestParam("1") | ||
166 | + return | ||
167 | + } | ||
168 | + ok := serverank.RankPeriodCheckTime(param.RankTypeId, beginTime, endTime, 0) | ||
169 | + if !ok { | ||
170 | + msg = protocol.BadRequestParam("10101") | ||
171 | + return | ||
172 | + } | ||
173 | + companyid := c.GetCompanyId() | ||
174 | + err = serverank.AddRankPeriod(param.RankTypeId, beginTime, endTime, param.Name, companyid) | ||
175 | + msg = protocol.NewReturnResponse(nil, err) | ||
176 | + return | ||
177 | +} | ||
178 | + | ||
179 | +//RankSeasonEdit ... | ||
180 | +//@router /rank/season/edit | ||
181 | +func (c RankController) RankSeasonEdit() { | ||
182 | + var msg *protocol.ResponseMessage | ||
183 | + defer func() { | ||
184 | + c.ResposeJson(msg) | ||
185 | + }() | ||
186 | + type Parameter struct { | ||
187 | + Id int64 `json:"id"` | ||
188 | + Name string `json:"name"` | ||
189 | + RankTypeId int64 `json:"rank_type_id"` | ||
190 | + BeginTime string `json:"begin_time"` | ||
191 | + EndTime string `json:"end_time"` | ||
192 | + } | ||
193 | + var param Parameter | ||
194 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
195 | + log.Error("json 解析失败 err:%s", err) | ||
196 | + msg = protocol.BadRequestParam("1") | ||
197 | + return | ||
198 | + } | ||
199 | + param.Name = strings.TrimSpace(param.Name) | ||
200 | + if len(param.Name) == 0 { | ||
201 | + msg = protocol.BadRequestParam("1") | ||
202 | + return | ||
203 | + } | ||
204 | + param.BeginTime = strings.TrimSpace(param.BeginTime) | ||
205 | + if len(param.BeginTime) == 0 { | ||
206 | + msg = protocol.BadRequestParam("10105") | ||
207 | + return | ||
208 | + } | ||
209 | + param.EndTime = strings.TrimSpace(param.EndTime) | ||
210 | + if len(param.EndTime) == 0 { | ||
211 | + msg = protocol.BadRequestParam("10106") | ||
212 | + return | ||
213 | + } | ||
214 | + var ( | ||
215 | + beginTime int64 | ||
216 | + endTime int64 | ||
217 | + ) | ||
218 | + t1, err := time.ParseInLocation("2006-01-02", param.BeginTime, time.Local) | ||
219 | + if err != nil { | ||
220 | + log.Error(err.Error()) | ||
221 | + msg = protocol.BadRequestParam("10105") | ||
222 | + return | ||
223 | + } | ||
224 | + beginTime = t1.Unix() | ||
225 | + t2, err := time.ParseInLocation("2006-01-02", param.EndTime, time.Local) | ||
226 | + if err != nil { | ||
227 | + log.Error(err.Error()) | ||
228 | + msg = protocol.BadRequestParam("10106") | ||
229 | + return | ||
230 | + } | ||
231 | + | ||
232 | + endTime = t2.Unix() + 86399 //60*60*24-1 | ||
233 | + if beginTime > endTime { | ||
234 | + msg = protocol.BadRequestParam("1") | ||
235 | + return | ||
236 | + } | ||
237 | + ok := serverank.RankPeriodCheckTime(param.RankTypeId, beginTime, endTime, param.Id) | ||
238 | + if !ok { | ||
239 | + msg = protocol.BadRequestParam("10101") | ||
240 | + return | ||
241 | + } | ||
242 | + companyid := c.GetCompanyId() | ||
243 | + fmt.Println(beginTime, endTime) | ||
244 | + err = serverank.EditRankPeriod(param.Id, beginTime, endTime, param.Name, companyid) | ||
245 | + msg = protocol.NewReturnResponse(nil, err) | ||
246 | + return | ||
247 | +} | ||
248 | + | ||
249 | +//RankRangeList 赛季榜单参与人列表 | ||
250 | +//@router /rank/range/list | ||
251 | +func (c RankController) RankRangeList() { | ||
252 | + var msg *protocol.ResponseMessage | ||
253 | + defer func() { | ||
254 | + c.ResposeJson(msg) | ||
255 | + }() | ||
256 | + type Parameter struct { | ||
257 | + RankTypeId int64 `json:"rank_type_id"` | ||
258 | + } | ||
259 | + var param Parameter | ||
260 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
261 | + log.Error("json 解析失败 err:%s", err) | ||
262 | + msg = protocol.BadRequestParam("1") | ||
263 | + return | ||
264 | + } | ||
265 | + companyid := c.GetCompanyId() | ||
266 | + rspData := serverank.GetRankRangeList(companyid, param.RankTypeId) | ||
267 | + msg = protocol.NewReturnResponse(rspData, nil) | ||
268 | + return | ||
269 | +} | ||
270 | + | ||
271 | +//RankRangeAdd 赛季榜单参与人列表添加 | ||
272 | +//@router /rank/range/add | ||
273 | +func (c RankController) RankRangeAdd() { | ||
274 | + var msg *protocol.ResponseMessage | ||
275 | + defer func() { | ||
276 | + c.ResposeJson(msg) | ||
277 | + }() | ||
278 | + type Parameter struct { | ||
279 | + RankTypeId int64 `json:"rank_type_id"` | ||
280 | + Name string `json:"name"` | ||
281 | + RangeType int8 `json:"range_type"` | ||
282 | + RelationId []int64 `json:"relation_id"` | ||
283 | + } | ||
284 | + var param Parameter | ||
285 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
286 | + log.Error("json 解析失败 err:%s", err) | ||
287 | + msg = protocol.BadRequestParam("1") | ||
288 | + return | ||
289 | + } | ||
290 | + param.Name = strings.TrimSpace(param.Name) | ||
291 | + n := []rune(param.Name) | ||
292 | + if len(n) == 0 || len(n) > 5 { | ||
293 | + msg = protocol.BadRequestParam("10107") | ||
294 | + return | ||
295 | + } | ||
296 | + ok := serverank.RankRangeNameOnlyOne(param.RankTypeId, 0, param.Name) | ||
297 | + if !ok { | ||
298 | + msg = protocol.BadRequestParam("10125") | ||
299 | + return | ||
300 | + } | ||
301 | + switch param.RangeType { | ||
302 | + case 1: | ||
303 | + param.RangeType = models.RANK_RANGE_TYPE_EMPLAYEE | ||
304 | + case 2: | ||
305 | + | ||
306 | + param.RangeType = models.RANK_RANGE_TYPE_DEPARTMENT | ||
307 | + | ||
308 | + default: | ||
309 | + log.Error("param.RangeType err") | ||
310 | + msg = protocol.BadRequestParam("1") | ||
311 | + return | ||
312 | + } | ||
313 | + companyid := c.GetCompanyId() | ||
314 | + err := serverank.AddRankRange(param.RankTypeId, param.Name, param.RangeType, param.RelationId, companyid) | ||
315 | + msg = protocol.NewReturnResponse(nil, err) | ||
316 | + return | ||
317 | +} | ||
318 | + | ||
319 | +//RankRangeEdit 赛季榜单参与人编辑 | ||
320 | +//@router /rank/range/edit | ||
321 | +func (c RankController) RankRangeEdit() { | ||
322 | + var msg *protocol.ResponseMessage | ||
323 | + defer func() { | ||
324 | + c.ResposeJson(msg) | ||
325 | + }() | ||
326 | + type Parameter struct { | ||
327 | + Id int64 `json:"id"` | ||
328 | + Name string `json:"name"` | ||
329 | + RangeType int8 `json:"range_type"` | ||
330 | + RelationId []int64 `json:"relation_id"` | ||
331 | + } | ||
332 | + var param Parameter | ||
333 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
334 | + log.Error("json 解析失败 err:%s", err) | ||
335 | + msg = protocol.BadRequestParam("1") | ||
336 | + return | ||
337 | + } | ||
338 | + | ||
339 | + param.Name = strings.TrimSpace(param.Name) | ||
340 | + n := []rune(param.Name) | ||
341 | + if len(n) == 0 || len(n) > 5 { | ||
342 | + msg = protocol.BadRequestParam("10107") | ||
343 | + return | ||
344 | + } | ||
345 | + | ||
346 | + switch param.RangeType { | ||
347 | + case 1: | ||
348 | + param.RangeType = models.RANK_RANGE_TYPE_EMPLAYEE | ||
349 | + case 2: | ||
350 | + param.RangeType = models.RANK_RANGE_TYPE_DEPARTMENT | ||
351 | + | ||
352 | + default: | ||
353 | + log.Error("param.RangeType err") | ||
354 | + msg = protocol.BadRequestParam("1") | ||
355 | + return | ||
356 | + } | ||
357 | + companyid := c.GetCompanyId() | ||
358 | + err := serverank.EditRankRange(param.Id, param.Name, param.RangeType, param.RelationId, companyid) | ||
359 | + msg = protocol.NewReturnResponse(nil, err) | ||
360 | + return | ||
361 | +} | ||
362 | + | ||
363 | +//RankRangeForbidAllow ... | ||
364 | +//@router /rank/range/forbid_allow | ||
365 | +func (c RankController) RankRangeForbidAllow() { | ||
366 | + var msg *protocol.ResponseMessage | ||
367 | + defer func() { | ||
368 | + c.ResposeJson(msg) | ||
369 | + }() | ||
370 | + type Parameter struct { | ||
371 | + Id int64 `json:"id"` | ||
372 | + Status int `json:"status"` | ||
373 | + } | ||
374 | + var param Parameter | ||
375 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
376 | + log.Error("json 解析失败 err:%s", err) | ||
377 | + msg = protocol.BadRequestParam("1") | ||
378 | + return | ||
379 | + } | ||
380 | + var err error | ||
381 | + companyid := c.GetCompanyId() | ||
382 | + switch param.Status { | ||
383 | + case 1: | ||
384 | + err = serverank.ForbidRankRange(param.Id, companyid) | ||
385 | + case 2: | ||
386 | + err = serverank.AllowRankRange(param.Id, companyid) | ||
387 | + default: | ||
388 | + err = protocol.NewErrWithMessage("1") | ||
389 | + } | ||
390 | + msg = protocol.NewReturnResponse(nil, err) | ||
391 | + return | ||
392 | +} | ||
393 | + | ||
394 | +//RankRangeInfo 赛季榜单参与人详情 | ||
395 | +//@router /rank/range/info | ||
396 | +func (c RankController) RankRangeInfo() { | ||
397 | + var msg *protocol.ResponseMessage | ||
398 | + defer func() { | ||
399 | + c.ResposeJson(msg) | ||
400 | + }() | ||
401 | + type Parameter struct { | ||
402 | + Id int64 `json:"id"` | ||
403 | + } | ||
404 | + var param Parameter | ||
405 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
406 | + log.Error("json 解析失败 err:%s", err) | ||
407 | + msg = protocol.BadRequestParam("1") | ||
408 | + return | ||
409 | + } | ||
410 | + // companyid := c.GetCompanyId() | ||
411 | + rspData := serverank.GetRankRangeInfo(param.Id) | ||
412 | + switch rspData.RangeType { | ||
413 | + case models.RANK_RANGE_TYPE_DEPARTMENT, models.RANK_RANGE_TYPE_DEPARTMENTALL: | ||
414 | + //部门 | ||
415 | + rspData.RangeType = 2 | ||
416 | + case models.RANK_RANGE_TYPE_EMPLAYEE, models.RANK_RANGE_TYPE_EMPLAYEEALL: | ||
417 | + //员工 | ||
418 | + rspData.RangeType = 1 | ||
419 | + | ||
420 | + } | ||
421 | + msg = protocol.NewReturnResponse(rspData, nil) | ||
422 | + return | ||
423 | +} | ||
424 | + | ||
425 | +//RankRangeSort ... | ||
426 | +//@router /rank/range/sort | ||
427 | +func (c RankController) RankRangeSort() { | ||
428 | + var msg *protocol.ResponseMessage | ||
429 | + defer func() { | ||
430 | + c.ResposeJson(msg) | ||
431 | + }() | ||
432 | + type Parameter struct { | ||
433 | + RankTypeId int64 `json:"rank_type_id"` | ||
434 | + Id []int64 `json:"id"` | ||
435 | + } | ||
436 | + var param Parameter | ||
437 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
438 | + log.Error("json 解析失败 err:%s", err) | ||
439 | + msg = protocol.BadRequestParam("1") | ||
440 | + return | ||
441 | + } | ||
442 | + err := serverank.RankRangeSort(param.Id) | ||
443 | + msg = protocol.NewReturnResponse(nil, err) | ||
444 | + return | ||
445 | +} | ||
446 | + | ||
447 | +//RankItemList 评比项列表 | ||
448 | +//@router /rank/item/list | ||
449 | +func (c RankController) RankItemList() { | ||
450 | + var msg *protocol.ResponseMessage | ||
451 | + defer func() { | ||
452 | + c.ResposeJson(msg) | ||
453 | + }() | ||
454 | + type Parameter struct { | ||
455 | + RankTypeId int64 `json:"rank_type_id"` | ||
456 | + } | ||
457 | + var param Parameter | ||
458 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
459 | + log.Error("json 解析失败 err:%s", err) | ||
460 | + msg = protocol.BadRequestParam("1") | ||
461 | + return | ||
462 | + } | ||
463 | + companyid := c.GetCompanyId() | ||
464 | + items := serverank.GetRankItemList(companyid, param.RankTypeId) | ||
465 | + rspdata := map[string][]protocol.RankItemInfo{ | ||
466 | + "all": serverank.AllRankItem, | ||
467 | + "checked": items, | ||
468 | + } | ||
469 | + msg = protocol.NewReturnResponse(rspdata, nil) | ||
470 | + return | ||
471 | +} | ||
472 | + | ||
473 | +//RankItemEdit ... | ||
474 | +//@router /rank/item/edit | ||
475 | +func (c RankController) RankItemEdit() { | ||
476 | + var msg *protocol.ResponseMessage | ||
477 | + defer func() { | ||
478 | + c.ResposeJson(msg) | ||
479 | + }() | ||
480 | + type Parameter struct { | ||
481 | + RankTypeId int64 `json:"rank_type_id"` | ||
482 | + ItemKey []string `json:"item_key"` | ||
483 | + } | ||
484 | + var param Parameter | ||
485 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
486 | + log.Error("json 解析失败 err:%s", err) | ||
487 | + msg = protocol.BadRequestParam("1") | ||
488 | + return | ||
489 | + } | ||
490 | + if len(param.ItemKey) > 4 { | ||
491 | + msg = protocol.BadRequestParam("10123") | ||
492 | + return | ||
493 | + } | ||
494 | + companyid := c.GetCompanyId() | ||
495 | + err := serverank.GetRankItemEdit(companyid, param.RankTypeId, param.ItemKey) | ||
496 | + msg = protocol.NewReturnResponse(nil, err) | ||
497 | + return | ||
498 | +} | ||
499 | + | ||
500 | +//RankRangeMove 赛季榜单参与人分组 批量移动 | ||
501 | +//@router /rank/range/move | ||
502 | +func (c RankController) RankRangeMove() { | ||
503 | + var msg *protocol.ResponseMessage | ||
504 | + defer func() { | ||
505 | + c.ResposeJson(msg) | ||
506 | + }() | ||
507 | + type Parameter struct { | ||
508 | + FromId int64 `json:"from_id"` | ||
509 | + ToId int64 `json:"to_id"` | ||
510 | + RelationId []int64 `json:"relation_id"` | ||
511 | + } | ||
512 | + var param Parameter | ||
513 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
514 | + log.Error("json 解析失败 err:%s", err) | ||
515 | + msg = protocol.BadRequestParam("1") | ||
516 | + return | ||
517 | + } | ||
518 | + companyid := c.GetCompanyId() | ||
519 | + err := serverank.RankRangeMove(param.FromId, param.ToId, param.RelationId, companyid) | ||
520 | + msg = protocol.NewReturnResponse(nil, err) | ||
521 | + return | ||
522 | +} | ||
523 | + | ||
524 | +//RankTypeConfig 赛季榜单的一些特殊配置(自动创建赛季) | ||
525 | +//@router /rank/type/config_set | ||
526 | +func (c RankController) RankTypeConfigSet() { | ||
527 | + var msg *protocol.ResponseMessage | ||
528 | + defer func() { | ||
529 | + c.ResposeJson(msg) | ||
530 | + }() | ||
531 | + type Parameter struct { | ||
532 | + RankTypeId int64 `json:"rank_type_id"` | ||
533 | + AutoCreate int8 `json:"auto_create"` //【0:不自动创建】【1:自动创建】 | ||
534 | + AutoCreateDay int `json:"auto_create_day"` //赛季时间, 单位:天 | ||
535 | + } | ||
536 | + var param Parameter | ||
537 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
538 | + log.Error("json 解析失败 err:%s", err) | ||
539 | + msg = protocol.BadRequestParam("1") | ||
540 | + return | ||
541 | + } | ||
542 | + companyid := c.GetCompanyId() | ||
543 | + var ( | ||
544 | + err error | ||
545 | + rankType *models.RankType | ||
546 | + ) | ||
547 | + rankType, err = models.GetRankById(param.RankTypeId) | ||
548 | + if err != nil { | ||
549 | + log.Error("获取rank_type数据失败:%s", err) | ||
550 | + e := protocol.NewErrWithMessage("1") | ||
551 | + msg = protocol.NewReturnResponse(nil, e) | ||
552 | + return | ||
553 | + } | ||
554 | + if rankType.CompanyId != companyid { | ||
555 | + log.Error("公司不匹配") | ||
556 | + e := protocol.NewErrWithMessage("1") | ||
557 | + msg = protocol.NewReturnResponse(nil, e) | ||
558 | + return | ||
559 | + } | ||
560 | + if param.AutoCreate > 1 || param.AutoCreate < 0 { | ||
561 | + e := protocol.NewErrWithMessage("1") | ||
562 | + msg = protocol.NewReturnResponse(nil, e) | ||
563 | + return | ||
564 | + } | ||
565 | + rankType.AutoCreate = param.AutoCreate | ||
566 | + rankType.AutoPeriod = param.AutoCreateDay | ||
567 | + err = models.UpdateRankById(rankType, []string{"AutoCreate", "AutoPeriod"}) | ||
568 | + if err != nil { | ||
569 | + log.Error("更新rank_type数据失败;%s", err) | ||
570 | + e := protocol.NewErrWithMessage("1") | ||
571 | + msg = protocol.NewReturnResponse(nil, e) | ||
572 | + return | ||
573 | + } | ||
574 | + msg = protocol.NewReturnResponse(nil, nil) | ||
575 | + return | ||
576 | +} | ||
577 | + | ||
578 | +//RankTypeConfig 赛季榜单的一些特殊配置(自动创建赛季) | ||
579 | +//@router /rank/type/config_show | ||
580 | +func (c RankController) RankTypeConfigShow() { | ||
581 | + var msg *protocol.ResponseMessage | ||
582 | + defer func() { | ||
583 | + c.ResposeJson(msg) | ||
584 | + }() | ||
585 | + type Parameter struct { | ||
586 | + RankTypeId int64 `json:"rank_type_id"` | ||
587 | + } | ||
588 | + var param Parameter | ||
589 | + if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { | ||
590 | + log.Error("json 解析失败 err:%s", err) | ||
591 | + msg = protocol.BadRequestParam("1") | ||
592 | + return | ||
593 | + } | ||
594 | + companyid := c.GetCompanyId() | ||
595 | + var ( | ||
596 | + err error | ||
597 | + rankType *models.RankType | ||
598 | + ) | ||
599 | + rankType, err = models.GetRankById(param.RankTypeId) | ||
600 | + if err != nil { | ||
601 | + log.Error("获取rank_type数据失败:%s", err) | ||
602 | + e := protocol.NewErrWithMessage("1") | ||
603 | + msg = protocol.NewReturnResponse(nil, e) | ||
604 | + return | ||
605 | + } | ||
606 | + if rankType.CompanyId != companyid { | ||
607 | + log.Error("公司不匹配") | ||
608 | + e := protocol.NewErrWithMessage("1") | ||
609 | + msg = protocol.NewReturnResponse(nil, e) | ||
610 | + return | ||
611 | + } | ||
612 | + v := struct { | ||
613 | + AutoCreate int8 `json:"auto_create"` | ||
614 | + AutoCreateDay int `json:"auto_create_day"` | ||
615 | + }{ | ||
616 | + AutoCreate: rankType.AutoCreate, | ||
617 | + AutoCreateDay: rankType.AutoPeriod, | ||
618 | + } | ||
619 | + msg = protocol.NewReturnResponse(v, nil) | ||
620 | + return | ||
621 | +} |
@@ -8,6 +8,8 @@ import ( | @@ -8,6 +8,8 @@ import ( | ||
8 | "oppmg/common/config" | 8 | "oppmg/common/config" |
9 | "oppmg/common/log" | 9 | "oppmg/common/log" |
10 | 10 | ||
11 | + "oppmg/services/crontab" | ||
12 | + | ||
11 | "github.com/astaxie/beego" | 13 | "github.com/astaxie/beego" |
12 | "github.com/astaxie/beego/orm" | 14 | "github.com/astaxie/beego/orm" |
13 | _ "github.com/go-sql-driver/mysql" | 15 | _ "github.com/go-sql-driver/mysql" |
@@ -23,5 +25,6 @@ func init() { | @@ -23,5 +25,6 @@ func init() { | ||
23 | func main() { | 25 | func main() { |
24 | 26 | ||
25 | log.Debug("%s 应用启动", time.Now().String()) | 27 | log.Debug("%s 应用启动", time.Now().String()) |
28 | + crontab.Run() | ||
26 | beego.Run() | 29 | beego.Run() |
27 | } | 30 | } |
models/achevement_score.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "time" | ||
5 | + | ||
6 | + "github.com/astaxie/beego/orm" | ||
7 | +) | ||
8 | + | ||
9 | +type AchevementScore struct { | ||
10 | + Id int64 `orm:"column(id);auto"` | ||
11 | + GraspScoreRemain float64 `orm:"column(grasp_score_remain);null;digits(10);decimals(1)" description:"福利池总分 ,来源achievement中的评分"` | ||
12 | + CompanyId int64 `orm:"column(company_id)"` | ||
13 | + CreateAt time.Time `orm:"column(create_at);type(timestamp);null"` | ||
14 | + UpdateAt time.Time `orm:"column(update_at);type(timestamp);null"` | ||
15 | +} | ||
16 | + | ||
17 | +func (t *AchevementScore) TableName() string { | ||
18 | + return "achevement_score" | ||
19 | +} | ||
20 | + | ||
21 | +func init() { | ||
22 | + orm.RegisterModel(new(AchevementScore)) | ||
23 | +} | ||
24 | + | ||
25 | +// AddAchevementScore insert a new AchevementScore into database and returns | ||
26 | +// last inserted Id on success. | ||
27 | +func AddAchevementScore(m *AchevementScore, o orm.Ormer) (id int64, err error) { | ||
28 | + id, err = o.Insert(m) | ||
29 | + return | ||
30 | +} | ||
31 | + | ||
32 | +// GetAchevementScoreById retrieves AchevementScore by Id. Returns error if | ||
33 | +// Id doesn't exist | ||
34 | +func GetAchevementScoreById(id int64) (v *AchevementScore, err error) { | ||
35 | + o := orm.NewOrm() | ||
36 | + v = &AchevementScore{Id: id} | ||
37 | + if err = o.Read(v); err == nil { | ||
38 | + return v, nil | ||
39 | + } | ||
40 | + return nil, err | ||
41 | +} | ||
42 | + | ||
43 | +func GetAchevementScoreByCompanyId(companyid int64) (v *AchevementScore, err error) { | ||
44 | + o := orm.NewOrm() | ||
45 | + v = &AchevementScore{} | ||
46 | + ok := o.QueryTable(&AchevementScore{}). | ||
47 | + Filter("company_id", companyid). | ||
48 | + Exist() | ||
49 | + if !ok { | ||
50 | + return v, nil | ||
51 | + } | ||
52 | + err = o.QueryTable(&AchevementScore{}). | ||
53 | + Filter("company_id", companyid). | ||
54 | + One(v) | ||
55 | + return v, err | ||
56 | +} | ||
57 | + | ||
58 | +func IncreaseAchevementScore(companyid int64, addScore float64, o orm.Ormer) error { | ||
59 | + v := &AchevementScore{} | ||
60 | + ok := o.QueryTable(&AchevementScore{}). | ||
61 | + Filter("company_id", companyid). | ||
62 | + Exist() | ||
63 | + if ok { | ||
64 | + nowTime := time.Now().Format("2006-01-02 15:04:05") | ||
65 | + sql := `update achevement_score set grasp_score_remain=grasp_score_remain+?,update_at=? where company_id=?` | ||
66 | + //存在,更新 | ||
67 | + _, err := o.Raw(sql, addScore, nowTime, companyid).Exec() | ||
68 | + return err | ||
69 | + } | ||
70 | + //不存在 | ||
71 | + v.CompanyId = companyid | ||
72 | + v.GraspScoreRemain = addScore | ||
73 | + v.CreateAt = time.Now() | ||
74 | + _, err := o.Insert(v) | ||
75 | + return err | ||
76 | +} |
models/achievement.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "oppmg/common/log" | ||
6 | + "time" | ||
7 | + | ||
8 | + "github.com/astaxie/beego/orm" | ||
9 | +) | ||
10 | + | ||
11 | +type Achievement struct { | ||
12 | + Id int64 `orm:"column(id);auto" description:"id 主键"` | ||
13 | + CompanyId int64 `orm:"column(company_id);null" description:"公司编号 表company.id"` | ||
14 | + DepartmentId int64 `orm:"column(department_id);null" description:"表department.id 部门id (创建成果指定的部门)"` | ||
15 | + UserCompanyId int64 `orm:"column(user_company_id)" description:"把握人 表user_company.id id"` | ||
16 | + ChanceTypeId int64 `orm:"column(chance_type_id);null" description:"表chance_type.id 机会类型 "` | ||
17 | + AuditTemplateId int64 `orm:"column(audit_template_id);null" description:"表audit_template.id 所属审批模板编号"` | ||
18 | + SourceContent string `orm:"column(source_content);null" description:"成果详情文本"` | ||
19 | + GraspScore float64 `orm:"column(grasp_score);digits(4);decimals(1)" description:"把握分"` | ||
20 | + UserGraspScore float64 `orm:"column(user_grasp_score);digits(4);decimals(1)" description:"把握人得分"` | ||
21 | + UpdateAt time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"` | ||
22 | + CreateAt time.Time `orm:"column(create_at);type(timestamp)" description:"创建时间"` | ||
23 | + ViewTotal int `orm:"column(view_total);null" description:"查看总数"` | ||
24 | + CommentTotal int `orm:"column(comment_total);null" description:"评论总数"` | ||
25 | + ZanTotal int `orm:"column(zan_total);null" description:"点赞总数"` | ||
26 | + Status int8 `orm:"column(status);null" description:"机会状态 1:开启 2:关闭 0:删除"` | ||
27 | + Images string `orm:"column(images);null" description:"图片 json"` | ||
28 | + GraspScoreRemain float64 `orm:"column(grasp_score_remain);digits(4);decimals(1)" ` | ||
29 | +} | ||
30 | + | ||
31 | +func (t *Achievement) TableName() string { | ||
32 | + return "achievement" | ||
33 | +} | ||
34 | + | ||
35 | +func init() { | ||
36 | + orm.RegisterModel(new(Achievement)) | ||
37 | +} | ||
38 | + | ||
39 | +//机会状态 1:开启 2:关闭 0:删除 | ||
40 | +const ( | ||
41 | + ACHIEVEMENT_STATUS_DEL int8 = 0 //删除 | ||
42 | + ACHIEVEMENT_STATUS_YES int8 = 1 //开启 | ||
43 | + ACHIEVEMENT_STATUS_NO int8 = 2 //关闭 | ||
44 | +) | ||
45 | + | ||
46 | +// AddAchievement insert a new Achievement into database and returns | ||
47 | +// last inserted Id on success. | ||
48 | +func AddAchievement(m *Achievement, om ...orm.Ormer) (id int64, err error) { | ||
49 | + var o orm.Ormer | ||
50 | + if len(om) > 0 { | ||
51 | + o = om[0] | ||
52 | + } else { | ||
53 | + o = orm.NewOrm() | ||
54 | + } | ||
55 | + id, err = o.Insert(m) | ||
56 | + return | ||
57 | +} | ||
58 | + | ||
59 | +// GetAchievementById retrieves Achievement by Id. Returns error if | ||
60 | +// Id doesn't exist | ||
61 | +func GetAchievementById(id int64) (v *Achievement, err error) { | ||
62 | + o := orm.NewOrm() | ||
63 | + v = &Achievement{Id: id} | ||
64 | + if err = o.Read(v); err == nil { | ||
65 | + return v, nil | ||
66 | + } | ||
67 | + return nil, err | ||
68 | +} | ||
69 | + | ||
70 | +// UpdateAchievement updates Achievement by Id and returns error if | ||
71 | +// the record to be updated doesn't exist | ||
72 | +func UpdateAchievementById(m *Achievement, cols []string, om ...orm.Ormer) (err error) { | ||
73 | + var o orm.Ormer | ||
74 | + if len(om) > 0 { | ||
75 | + o = om[0] | ||
76 | + } else { | ||
77 | + o = orm.NewOrm() | ||
78 | + } | ||
79 | + m.UpdateAt = time.Now() | ||
80 | + if len(cols) > 0 { | ||
81 | + cols = append(cols, "UpdateAt") | ||
82 | + } | ||
83 | + var num int64 | ||
84 | + if num, err = o.Update(m, cols...); err == nil { | ||
85 | + log.Info("Number of records updated in database:", num) | ||
86 | + } | ||
87 | + | ||
88 | + return | ||
89 | +} | ||
90 | + | ||
91 | +// DeleteAchievement deletes Achievement by Id and returns error if | ||
92 | +// the record to be deleted doesn't exist | ||
93 | +func DeleteAchievement(id int64) (err error) { | ||
94 | + o := orm.NewOrm() | ||
95 | + v := Achievement{Id: id} | ||
96 | + // ascertain id exists in the database | ||
97 | + if err = o.Read(&v); err == nil { | ||
98 | + var num int64 | ||
99 | + if num, err = o.Delete(&Achievement{Id: id}); err == nil { | ||
100 | + fmt.Println("Number of records deleted in database:", num) | ||
101 | + } | ||
102 | + } | ||
103 | + return | ||
104 | +} |
models/achievement_chance.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "time" | ||
6 | + | ||
7 | + "github.com/astaxie/beego/orm" | ||
8 | +) | ||
9 | + | ||
10 | +type AchievementChance struct { | ||
11 | + Id int64 `orm:"column(id);auto"` | ||
12 | + AchievementId int64 `orm:"column(achievement_id);null" description:"成果编号 表achievement.id"` | ||
13 | + ChanceId int64 `orm:"column(chance_id);null" description:"机会编号 表chance.id"` | ||
14 | + ChanceCode string `orm:"column(chance_code);size(255);null" description:"机会编号 表chance.code"` | ||
15 | + CreateAt time.Time `orm:"column(create_at);type(timestamp);null" description:"创建时间"` | ||
16 | +} | ||
17 | + | ||
18 | +func (t *AchievementChance) TableName() string { | ||
19 | + return "achievement_chance" | ||
20 | +} | ||
21 | + | ||
22 | +func init() { | ||
23 | + orm.RegisterModel(new(AchievementChance)) | ||
24 | +} | ||
25 | + | ||
26 | +// AddAchievementChance insert a new AchievementChance into database and returns | ||
27 | +// last inserted Id on success. | ||
28 | +func AddAchievementChance(m *AchievementChance) (id int64, err error) { | ||
29 | + o := orm.NewOrm() | ||
30 | + id, err = o.Insert(m) | ||
31 | + return | ||
32 | +} | ||
33 | + | ||
34 | +// GetAchievementChanceById retrieves AchievementChance by Id. Returns error if | ||
35 | +// Id doesn't exist | ||
36 | +func GetAchievementChanceById(id int64) (v *AchievementChance, err error) { | ||
37 | + o := orm.NewOrm() | ||
38 | + v = &AchievementChance{Id: id} | ||
39 | + if err = o.Read(v); err == nil { | ||
40 | + return v, nil | ||
41 | + } | ||
42 | + return nil, err | ||
43 | +} | ||
44 | + | ||
45 | +// UpdateAchievementChance updates AchievementChance by Id and returns error if | ||
46 | +// the record to be updated doesn't exist | ||
47 | +func UpdateAchievementChanceById(m *AchievementChance) (err error) { | ||
48 | + o := orm.NewOrm() | ||
49 | + v := AchievementChance{Id: m.Id} | ||
50 | + // ascertain id exists in the database | ||
51 | + if err = o.Read(&v); err == nil { | ||
52 | + var num int64 | ||
53 | + if num, err = o.Update(m); err == nil { | ||
54 | + fmt.Println("Number of records updated in database:", num) | ||
55 | + } | ||
56 | + } | ||
57 | + return | ||
58 | +} | ||
59 | + | ||
60 | +func GetAchievementChanceByAchieve(achievementid int64) ([]AchievementChance, error) { | ||
61 | + var ( | ||
62 | + err error | ||
63 | + data []AchievementChance | ||
64 | + ) | ||
65 | + o := orm.NewOrm() | ||
66 | + _, err = o.QueryTable(&AchievementChance{}). | ||
67 | + Filter("achievement_id", achievementid). | ||
68 | + All(&data) | ||
69 | + if err == orm.ErrNoRows { | ||
70 | + return data, nil | ||
71 | + } | ||
72 | + return data, err | ||
73 | +} |
models/achievement_provider.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "time" | ||
6 | + | ||
7 | + "github.com/astaxie/beego/orm" | ||
8 | +) | ||
9 | + | ||
10 | +type AchievementProvider struct { | ||
11 | + Id int64 `orm:"column(id);auto" description:"主键id"` | ||
12 | + AchievementId int64 `orm:"column(achievement_id);null" description:"表achievement.id"` | ||
13 | + UserCompanyId int64 `orm:"column(user_company_id);null" description:"user_company.id"` | ||
14 | + UserGraspScore float64 `orm:"column(user_grasp_score);null;digits(4);decimals(1)" description:"把握人得分"` | ||
15 | + DepartmentId int64 `orm:"column(department_id)"` | ||
16 | + CreateAt time.Time `orm:"column(create_at);type(timestamp);null" description:"创建时间"` | ||
17 | +} | ||
18 | + | ||
19 | +func (t *AchievementProvider) TableName() string { | ||
20 | + return "achievement_provider" | ||
21 | +} | ||
22 | + | ||
23 | +func init() { | ||
24 | + orm.RegisterModel(new(AchievementProvider)) | ||
25 | +} | ||
26 | + | ||
27 | +// AddAchievementProvider insert a new AchievementProvider into database and returns | ||
28 | +// last inserted Id on success. | ||
29 | +func AddAchievementProvider(m *AchievementProvider) (id int64, err error) { | ||
30 | + o := orm.NewOrm() | ||
31 | + id, err = o.Insert(m) | ||
32 | + return | ||
33 | +} | ||
34 | + | ||
35 | +// GetAchievementProviderById retrieves AchievementProvider by Id. Returns error if | ||
36 | +// Id doesn't exist | ||
37 | +func GetAchievementProviderById(id int64) (v *AchievementProvider, err error) { | ||
38 | + o := orm.NewOrm() | ||
39 | + v = &AchievementProvider{Id: id} | ||
40 | + if err = o.Read(v); err == nil { | ||
41 | + return v, nil | ||
42 | + } | ||
43 | + return nil, err | ||
44 | +} | ||
45 | + | ||
46 | +// UpdateAchievementProvider updates AchievementProvider by Id and returns error if | ||
47 | +// the record to be updated doesn't exist | ||
48 | +func UpdateAchievementProviderById(m *AchievementProvider) (err error) { | ||
49 | + o := orm.NewOrm() | ||
50 | + v := AchievementProvider{Id: m.Id} | ||
51 | + // ascertain id exists in the database | ||
52 | + if err = o.Read(&v); err == nil { | ||
53 | + var num int64 | ||
54 | + if num, err = o.Update(m); err == nil { | ||
55 | + fmt.Println("Number of records updated in database:", num) | ||
56 | + } | ||
57 | + } | ||
58 | + return | ||
59 | +} | ||
60 | + | ||
61 | +func GetAchievementProviderByAchieve(achievementid int64) ([]AchievementProvider, error) { | ||
62 | + var ( | ||
63 | + err error | ||
64 | + data []AchievementProvider | ||
65 | + ) | ||
66 | + o := orm.NewOrm() | ||
67 | + _, err = o.QueryTable(&AchievementProvider{}). | ||
68 | + Filter("achievement_id", achievementid). | ||
69 | + All(&data) | ||
70 | + if err == orm.ErrNoRows { | ||
71 | + return data, nil | ||
72 | + } | ||
73 | + return data, err | ||
74 | +} |
@@ -36,7 +36,7 @@ type ChanceDataSpeechs struct { | @@ -36,7 +36,7 @@ type ChanceDataSpeechs struct { | ||
36 | } | 36 | } |
37 | 37 | ||
38 | type ChanceDataVideos struct { | 38 | type ChanceDataVideos struct { |
39 | - Path string | 39 | + Path string `json:"path"` |
40 | Cover ChanceDataImage `json:"cover"` | 40 | Cover ChanceDataImage `json:"cover"` |
41 | Duration int `json:"duration"` | 41 | Duration int `json:"duration"` |
42 | } | 42 | } |
models/chance_revise_log.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "encoding/json" | ||
5 | + "time" | ||
6 | + | ||
7 | + "github.com/astaxie/beego/orm" | ||
8 | +) | ||
9 | + | ||
10 | +type ChanceReviseLog struct { | ||
11 | + Id int64 `orm:"column(id);pk" description:"id 主键"` | ||
12 | + ChanceId int64 `orm:"column(chance_id)" description:"机会编号"` | ||
13 | + UserCompanyId int64 `orm:"column(user_company_id);null" description:"用户编号 编辑机会的人"` | ||
14 | + Data string `orm:"column(data);null" description:"机会数据"` | ||
15 | + CreateAt time.Time `orm:"column(create_at);type(timestamp);null" description:"创建时间"` | ||
16 | + AuditFlowLogId int64 `orm:"column(audit_flow_log_id);null" description:"表audit_flow_log.id "` | ||
17 | +} | ||
18 | + | ||
19 | +func (t *ChanceReviseLog) TableName() string { | ||
20 | + return "chance_revise_log" | ||
21 | +} | ||
22 | + | ||
23 | +func init() { | ||
24 | + orm.RegisterModel(new(ChanceReviseLog)) | ||
25 | +} | ||
26 | + | ||
27 | +type ReviseContentsItem struct { | ||
28 | + Content string `json:"content"` | ||
29 | +} | ||
30 | + | ||
31 | +type ChanceReviseLogData struct { | ||
32 | + ReviseContents []ReviseContentsItem `json:"reviseContents"` | ||
33 | + Speechs []ChanceDataSpeechs `json:"speechs"` | ||
34 | + Pictures []ChanceDataImage `json:"pictures"` | ||
35 | + Videos []ChanceDataVideos `json:"videos"` | ||
36 | + RemoveAllPhotoVideo bool `json:"removeAllPhotoVideo"` | ||
37 | + RemoveAllSpeech bool `json:"removeAllSpeech"` | ||
38 | +} | ||
39 | + | ||
40 | +// GetChanceReviseLogById retrieves ChanceReviseLog by Id. Returns error if | ||
41 | +// Id doesn't exist | ||
42 | +func GetChanceReviseLogById(id int64) (v *ChanceReviseLog, err error) { | ||
43 | + o := orm.NewOrm() | ||
44 | + v = &ChanceReviseLog{Id: id} | ||
45 | + if err = o.Read(v); err == nil { | ||
46 | + return v, nil | ||
47 | + } | ||
48 | + return nil, err | ||
49 | +} | ||
50 | + | ||
51 | +func GetChanceReviseLogData(flowLogId int64) (*ChanceReviseLog, *ChanceReviseLogData, error) { | ||
52 | + o := orm.NewOrm() | ||
53 | + var ( | ||
54 | + err error | ||
55 | + ) | ||
56 | + reviseLog := &ChanceReviseLog{} | ||
57 | + err = o.QueryTable(&ChanceReviseLog{}). | ||
58 | + Filter("audit_flow_log_id", flowLogId). | ||
59 | + One(reviseLog) | ||
60 | + if err != nil { | ||
61 | + return nil, nil, err | ||
62 | + } | ||
63 | + reviseLogData := &ChanceReviseLogData{ | ||
64 | + ReviseContents: make([]ReviseContentsItem, 0), | ||
65 | + Speechs: make([]ChanceDataSpeechs, 0), | ||
66 | + Pictures: make([]ChanceDataImage, 0), | ||
67 | + Videos: make([]ChanceDataVideos, 0), | ||
68 | + } | ||
69 | + json.Unmarshal([]byte(reviseLog.Data), reviseLogData) | ||
70 | + return reviseLog, reviseLogData, err | ||
71 | +} |
@@ -17,6 +17,7 @@ type Company struct { | @@ -17,6 +17,7 @@ type Company struct { | ||
17 | Logo string `orm:"column(logo);size(255)"` | 17 | Logo string `orm:"column(logo);size(255)"` |
18 | Enable int8 `orm:"column(enable)"` | 18 | Enable int8 `orm:"column(enable)"` |
19 | UserCenterId int64 `orm:"column(user_center_id)"` | 19 | UserCenterId int64 `orm:"column(user_center_id)"` |
20 | + Remark string `orm:"column(remark)"` | ||
20 | } | 21 | } |
21 | 22 | ||
22 | func (t *Company) TableName() string { | 23 | func (t *Company) TableName() string { |
@@ -12,16 +12,18 @@ import ( | @@ -12,16 +12,18 @@ import ( | ||
12 | ) | 12 | ) |
13 | 13 | ||
14 | type Department struct { | 14 | type Department struct { |
15 | - Id int64 `orm:"column(id);auto"` | ||
16 | - CompanyId int64 `orm:"column(company_id)" description:"公司id"` | ||
17 | - Name string `orm:"column(name);size(30)" description:"部门名称"` | ||
18 | - CreateAt time.Time `orm:"column(create_at);type(timestamp)" description:"创建时间"` | ||
19 | - ParentId int64 `orm:"column(parent_id)" description:"父级id"` | ||
20 | - Relation string `orm:"column(relation);size(1024)" description:"父子级关系树"` | ||
21 | - DeleteAt time.Time `orm:"column(delete_at);type(timestamp)" description:"删除时间"` | ||
22 | - UpdateAt time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"` | ||
23 | - Manages string `orm:"column(managers)" description:"部门负责人id列表 json 数组 []"` //存user_company_id | ||
24 | - IsTop int8 `orm:"column(is_top)" ` | 15 | + Id int64 `orm:"column(id);auto"` |
16 | + CompanyId int64 `orm:"column(company_id)" description:"公司id"` | ||
17 | + Name string `orm:"column(name);size(30)" description:"部门名称"` | ||
18 | + CreateAt time.Time `orm:"column(create_at);type(timestamp)" description:"创建时间"` | ||
19 | + ParentId int64 `orm:"column(parent_id)" description:"父级id"` | ||
20 | + Relation string `orm:"column(relation);size(1024)" description:"父子级关系树"` | ||
21 | + DeleteAt time.Time `orm:"column(delete_at);type(timestamp)" description:"删除时间"` | ||
22 | + UpdateAt time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"` | ||
23 | + Manages string `orm:"column(managers)" description:"部门负责人id列表 json 数组 []"` //存user_company_id | ||
24 | + IsTop int8 `orm:"column(is_top)" ` | ||
25 | + Level int `orm:"column(level)" ` | ||
26 | + BusinessDepartmentId int64 `orm:"column(business_department_id)"` | ||
25 | } | 27 | } |
26 | 28 | ||
27 | func (t *Department) TableName() string { | 29 | func (t *Department) TableName() string { |
@@ -55,9 +57,11 @@ func (t *Department) SetRelation(parent *Department) error { | @@ -55,9 +57,11 @@ func (t *Department) SetRelation(parent *Department) error { | ||
55 | return errors.New("Id==0") | 57 | return errors.New("Id==0") |
56 | } | 58 | } |
57 | if parent == nil { | 59 | if parent == nil { |
58 | - t.Relation = fmt.Sprintf("%d", t.Id) | 60 | + t.Relation = fmt.Sprintf(",%d,", t.Id) |
61 | + } else if parent.Id == 0 { | ||
62 | + t.Relation = fmt.Sprintf(",%d,", t.Id) | ||
59 | } else { | 63 | } else { |
60 | - t.Relation = fmt.Sprintf("%s/%d", parent.Relation, t.Id) | 64 | + t.Relation = fmt.Sprintf("%s%d,", parent.Relation, t.Id) |
61 | } | 65 | } |
62 | return nil | 66 | return nil |
63 | } | 67 | } |
@@ -187,11 +191,15 @@ func GetDepartmentByCompanyId(companyId int64) ([]Department, error) { | @@ -187,11 +191,15 @@ func GetDepartmentByCompanyId(companyId int64) ([]Department, error) { | ||
187 | o := orm.NewOrm() | 191 | o := orm.NewOrm() |
188 | _, err = o.QueryTable(&Department{}). | 192 | _, err = o.QueryTable(&Department{}). |
189 | Filter("company_id", companyId). | 193 | Filter("company_id", companyId). |
194 | + Filter("delete_at", 0). | ||
190 | All(&result) | 195 | All(&result) |
191 | return result, err | 196 | return result, err |
192 | } | 197 | } |
193 | 198 | ||
194 | func GetDepartmentByIds(departmentIds []int64) ([]Department, error) { | 199 | func GetDepartmentByIds(departmentIds []int64) ([]Department, error) { |
200 | + if len(departmentIds) == 0 { | ||
201 | + return nil, nil | ||
202 | + } | ||
195 | var ( | 203 | var ( |
196 | result []Department | 204 | result []Department |
197 | err error | 205 | err error |
@@ -215,3 +223,25 @@ func ExistDepartmentName(parentId int64, dname string) bool { | @@ -215,3 +223,25 @@ func ExistDepartmentName(parentId int64, dname string) bool { | ||
215 | Exist() | 223 | Exist() |
216 | return ok | 224 | return ok |
217 | } | 225 | } |
226 | + | ||
227 | +func GetDepartmentByBusinessId(businessId int64) (v *Department, err error) { | ||
228 | + v = &Department{} | ||
229 | + o := orm.NewOrm() | ||
230 | + err = o.QueryTable(&Department{}). | ||
231 | + Filter("business_department_id", businessId). | ||
232 | + Filter("delete_at", 0). | ||
233 | + One(v) | ||
234 | + return v, err | ||
235 | + | ||
236 | +} | ||
237 | + | ||
238 | +func GetTopDepartmentByCompany(companyid int64) (v *Department, err error) { | ||
239 | + v = &Department{} | ||
240 | + o := orm.NewOrm() | ||
241 | + err = o.QueryTable(&Department{}). | ||
242 | + Filter("company_id", companyid). | ||
243 | + Filter("is_top", 1). | ||
244 | + Filter("delete_at", 0). | ||
245 | + One(v) | ||
246 | + return v, err | ||
247 | +} |
models/department_charge.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "oppmg/utils" | ||
6 | + "time" | ||
7 | + | ||
8 | + "github.com/astaxie/beego/orm" | ||
9 | +) | ||
10 | + | ||
11 | +type DepartmentCharge struct { | ||
12 | + Id int64 `orm:"column(id);auto"` | ||
13 | + CompanyId int64 `orm:"column(company_id)" description:"公司id"` | ||
14 | + DepartmentId int64 `orm:"column(department_id)" description:"部门id"` | ||
15 | + UserCompanyId int64 `orm:"column(user_company_id)" description:"用户id"` | ||
16 | + CreateTime time.Time `orm:"column(create_time);type(timestamp)"` | ||
17 | + Enabled int8 `orm:"column(enabled)"` | ||
18 | +} | ||
19 | + | ||
20 | +func (t *DepartmentCharge) TableName() string { | ||
21 | + return "department_charge" | ||
22 | +} | ||
23 | + | ||
24 | +func init() { | ||
25 | + orm.RegisterModel(new(DepartmentCharge)) | ||
26 | +} | ||
27 | + | ||
28 | +const ( | ||
29 | + DEPARTMENT_CHARGE_ENABLE_YES int8 = 1 | ||
30 | + DEPARTMENT_CHARGE_ENABLE_NO int8 = 2 | ||
31 | +) | ||
32 | + | ||
33 | +// AddDepartmentCharge insert a new DepartmentCharge into database and returns | ||
34 | +// last inserted Id on success. | ||
35 | +func AddDepartmentCharge(m *DepartmentCharge, o orm.Ormer) (id int64, err error) { | ||
36 | + id, err = o.Insert(m) | ||
37 | + return | ||
38 | +} | ||
39 | + | ||
40 | +// UpdateDepartmentCharge updates DepartmentCharge by Id and returns error if | ||
41 | +// the record to be updated doesn't exist | ||
42 | +func UpdateDepartmentChargeById(m *DepartmentCharge) (err error) { | ||
43 | + o := orm.NewOrm() | ||
44 | + v := DepartmentCharge{Id: m.Id} | ||
45 | + // ascertain id exists in the database | ||
46 | + if err = o.Read(&v); err == nil { | ||
47 | + var num int64 | ||
48 | + if num, err = o.Update(m); err == nil { | ||
49 | + fmt.Println("Number of records updated in database:", num) | ||
50 | + } | ||
51 | + } | ||
52 | + return | ||
53 | +} | ||
54 | + | ||
55 | +func GetDepartmentCharge(departmentId int64) ([]DepartmentCharge, error) { | ||
56 | + var ( | ||
57 | + data []DepartmentCharge | ||
58 | + err error | ||
59 | + ) | ||
60 | + o := orm.NewOrm() | ||
61 | + _, err = o.QueryTable(&DepartmentCharge{}). | ||
62 | + Filter("department_id", departmentId). | ||
63 | + Filter("enabled", 1). | ||
64 | + All(&data) | ||
65 | + if err == orm.ErrNoRows { | ||
66 | + return data, nil | ||
67 | + } | ||
68 | + return data, err | ||
69 | +} | ||
70 | + | ||
71 | +//ChangeDepartmentCharge 变更部门的主管 | ||
72 | +func ChangeDepartmentCharge(companyId int64, departmentId int64, userCompanyid []int64, om orm.Ormer) error { | ||
73 | + var ( | ||
74 | + err error | ||
75 | + charges []DepartmentCharge | ||
76 | + oldChargeIds []int64 | ||
77 | + ) | ||
78 | + charges, err = GetDepartmentCharge(departmentId) | ||
79 | + if err != nil { | ||
80 | + return fmt.Errorf("获取部门主管数据失败:%s", err) | ||
81 | + } | ||
82 | + for _, v := range charges { | ||
83 | + oldChargeIds = append(oldChargeIds, v.Id) | ||
84 | + } | ||
85 | + var ( | ||
86 | + delIds []int64 | ||
87 | + addIds []int64 | ||
88 | + addCharges []DepartmentCharge | ||
89 | + ) | ||
90 | + delIds = utils.ArrayInt64Diff(oldChargeIds, userCompanyid) | ||
91 | + addIds = utils.ArrayInt64Diff(userCompanyid, oldChargeIds) | ||
92 | + nowTime := time.Now() | ||
93 | + for _, v := range addIds { | ||
94 | + m := DepartmentCharge{ | ||
95 | + CompanyId: companyId, | ||
96 | + UserCompanyId: v, | ||
97 | + DepartmentId: departmentId, | ||
98 | + Enabled: DEPARTMENT_CHARGE_ENABLE_YES, | ||
99 | + CreateTime: nowTime, | ||
100 | + } | ||
101 | + addCharges = append(addCharges, m) | ||
102 | + | ||
103 | + } | ||
104 | + if len(delIds) > 0 { | ||
105 | + _, err = om.QueryTable(&DepartmentCharge{}). | ||
106 | + Filter("department_id", departmentId). | ||
107 | + Filter("user_company_id__in", delIds). | ||
108 | + Update(orm.Params{ | ||
109 | + "enable": DEPARTMENT_CHARGE_ENABLE_NO, | ||
110 | + }) | ||
111 | + if err != nil { | ||
112 | + return fmt.Errorf("更新department_charge数据失败,err:%s", err) | ||
113 | + } | ||
114 | + } | ||
115 | + if len(addCharges) > 0 { | ||
116 | + _, err = om.InsertMulti(10, addCharges) | ||
117 | + if err != nil { | ||
118 | + return fmt.Errorf("添加department_charge数据失败,err:%s", err) | ||
119 | + } | ||
120 | + } | ||
121 | + | ||
122 | + return nil | ||
123 | +} |
1 | package models | 1 | package models |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | - "errors" | ||
5 | "fmt" | 4 | "fmt" |
6 | "time" | 5 | "time" |
7 | 6 | ||
@@ -9,17 +8,20 @@ import ( | @@ -9,17 +8,20 @@ import ( | ||
9 | ) | 8 | ) |
10 | 9 | ||
11 | type Position struct { | 10 | type Position struct { |
12 | - Id int64 `orm:"column(id);auto" description:"职位表id"` | ||
13 | - CompanyId int64 `orm:"column(company_id)" description:"表company.id 公司编号"` | ||
14 | - Name string `orm:"column(name);size(100)" description:"职位名称"` | ||
15 | - ParentId int64 `orm:"column(parent_id)" description:"父级id"` | ||
16 | - Relation string `orm:"column(relation);size(1000)" description:"父子级关系树"` | ||
17 | - CreateAt time.Time `orm:"column(create_at);type(timestamp)" description:"创建时间"` | ||
18 | - UpdateAt time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"` | ||
19 | - DeleteAt time.Time `orm:"column(delete_at);type(timestamp)" description:"删除时间"` | ||
20 | - EnableStatus string `orm:"column(enable_status);size(255)" description:"有效状态 1:有效 0:无效"` | 11 | + Id int64 `orm:"column(id);auto" description:"职位表id"` |
12 | + CompanyId int64 `orm:"column(company_id)" description:"表company.id 公司编号"` | ||
13 | + Name string `orm:"column(name);size(100)" description:"职位名称"` | ||
14 | + ParentId int64 `orm:"column(parent_id)" description:"父级id"` | ||
15 | + Relation string `orm:"column(relation);size(1000)" description:"父子级关系树"` | ||
16 | + CreateAt time.Time `orm:"column(create_at);type(timestamp)" description:"创建时间"` | ||
17 | + UpdateAt time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"` | ||
18 | + DeleteAt time.Time `orm:"column(delete_at);type(timestamp)" description:"删除时间"` | ||
19 | + EnableStatus string `orm:"column(enable_status);size(255)" description:"有效状态 1:有效 0:无效"` | ||
20 | + Level int `orm:"column(level)"` | ||
21 | + BusinessPositionId int64 `orm:"column(business_position_id)"` | ||
21 | } | 22 | } |
22 | 23 | ||
24 | +//关联企业总后台的id | ||
23 | func (t *Position) TableName() string { | 25 | func (t *Position) TableName() string { |
24 | return "position" | 26 | return "position" |
25 | } | 27 | } |
@@ -29,13 +31,10 @@ func init() { | @@ -29,13 +31,10 @@ func init() { | ||
29 | } | 31 | } |
30 | 32 | ||
31 | func (t *Position) SetRelation(parent *Position) error { | 33 | func (t *Position) SetRelation(parent *Position) error { |
32 | - if t.Id == 0 { | ||
33 | - return errors.New("Id==0") | ||
34 | - } | ||
35 | if parent == nil { | 34 | if parent == nil { |
36 | - t.Relation = fmt.Sprintf("%d", t.Id) | 35 | + t.Relation = fmt.Sprintf(",%d,", t.Id) |
37 | } else { | 36 | } else { |
38 | - t.Relation = fmt.Sprintf("%s/%d", parent.Relation, t.Id) | 37 | + t.Relation = fmt.Sprintf("%s%d,", parent.Relation, t.Id) |
39 | } | 38 | } |
40 | return nil | 39 | return nil |
41 | } | 40 | } |
@@ -82,6 +81,7 @@ func UpdatePositionById(m *Position, col []string, om ...orm.Ormer) (err error) | @@ -82,6 +81,7 @@ func UpdatePositionById(m *Position, col []string, om ...orm.Ormer) (err error) | ||
82 | if err = o.Read(&v); err == nil { | 81 | if err = o.Read(&v); err == nil { |
83 | var num int64 | 82 | var num int64 |
84 | m.UpdateAt = time.Now() | 83 | m.UpdateAt = time.Now() |
84 | + col = append(col, "UpdateAt") | ||
85 | if num, err = o.Update(m, col...); err == nil { | 85 | if num, err = o.Update(m, col...); err == nil { |
86 | fmt.Println("Number of records updated in database:", num) | 86 | fmt.Println("Number of records updated in database:", num) |
87 | } | 87 | } |
@@ -102,3 +102,13 @@ func ExistPositiontName(companyid int64, parentId int64, dname string) bool { | @@ -102,3 +102,13 @@ func ExistPositiontName(companyid int64, parentId int64, dname string) bool { | ||
102 | Exist() | 102 | Exist() |
103 | return ok | 103 | return ok |
104 | } | 104 | } |
105 | + | ||
106 | +func GetPositionByBusinessId(businessId int64) (v *Position, err error) { | ||
107 | + o := orm.NewOrm() | ||
108 | + v = &Position{} | ||
109 | + err = o.QueryTable(&Position{}). | ||
110 | + Filter("business_position_id", businessId). | ||
111 | + Filter("delete_at", 0). | ||
112 | + One(v) | ||
113 | + return v, err | ||
114 | +} |
models/rank_item.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "oppmg/common/log" | ||
5 | + "time" | ||
6 | + | ||
7 | + "github.com/astaxie/beego/orm" | ||
8 | +) | ||
9 | + | ||
10 | +type RankItem struct { | ||
11 | + Id int64 `orm:"column(id);auto"` | ||
12 | + CompanyId int64 `orm:"column(company_id);null" description:"公司编号 company.id"` | ||
13 | + RankTypeId int64 `orm:"column(rank_type_id)" description:"表rank_type.id 榜单类型编号"` | ||
14 | + CreateAt time.Time `orm:"column(create_at);type(timestamp);null" description:"创建时间"` | ||
15 | + UpdateAt time.Time `orm:"column(update_at);type(timestamp);null" description:"更新时间"` | ||
16 | + SortNum int `orm:"column(sort_num);null" description:"序号"` | ||
17 | + ItemName string `orm:"column(item_name);size(50);null" description:"评比项名称"` | ||
18 | + ItemKey string `orm:"column(item_key);size(50);null" description:"评比项键值(排行榜排序使用)"` | ||
19 | +} | ||
20 | + | ||
21 | +func (t *RankItem) TableName() string { | ||
22 | + return "rank_item" | ||
23 | +} | ||
24 | + | ||
25 | +func init() { | ||
26 | + orm.RegisterModel(new(RankItem)) | ||
27 | +} | ||
28 | + | ||
29 | +// AddRankItem insert a new NewRankItem into database and returns | ||
30 | +// last inserted Id on success. | ||
31 | +func AddRankItem(m []RankItem, om orm.Ormer) (successSum int64, err error) { | ||
32 | + nowTime := time.Now() | ||
33 | + for i := range m { | ||
34 | + m[i].CreateAt = nowTime | ||
35 | + m[i].UpdateAt = nowTime | ||
36 | + } | ||
37 | + successSum, err = om.InsertMulti(10, &m) | ||
38 | + return | ||
39 | +} | ||
40 | + | ||
41 | +// GetRankItemById retrieves NewRankItem by Id. Returns error if | ||
42 | +// Id doesn't exist | ||
43 | +func GetRankItemById(id int64) (v *RankItem, err error) { | ||
44 | + o := orm.NewOrm() | ||
45 | + v = &RankItem{Id: id} | ||
46 | + if err = o.Read(v); err == nil { | ||
47 | + return v, nil | ||
48 | + } | ||
49 | + return nil, err | ||
50 | +} | ||
51 | + | ||
52 | +func GetRankItemByCompanyid(companyid int64, rankTypeId int64) ([]RankItem, error) { | ||
53 | + var ( | ||
54 | + data []RankItem | ||
55 | + err error | ||
56 | + ) | ||
57 | + o := orm.NewOrm() | ||
58 | + _, err = o.QueryTable(&RankItem{}). | ||
59 | + Filter("company_id", companyid). | ||
60 | + Filter("rank_type_id", rankTypeId). | ||
61 | + All(&data) | ||
62 | + if err == orm.ErrNoRows { | ||
63 | + return data, nil | ||
64 | + } | ||
65 | + return data, err | ||
66 | +} | ||
67 | + | ||
68 | +func DeleteRanKItemByIds(ids []int64, om orm.Ormer) error { | ||
69 | + _, err := om.QueryTable(&RankItem{}).Filter("id__in", ids).Delete() | ||
70 | + return err | ||
71 | +} | ||
72 | + | ||
73 | +// UpdateRankItem updates RankItem by Id and returns error if | ||
74 | +// the record to be updated doesn't exist | ||
75 | +func UpdateRankItemById(m *RankItem, cols []string, om orm.Ormer) (err error) { | ||
76 | + if len(cols) > 0 { | ||
77 | + cols = append(cols, "UpdateAt") | ||
78 | + } | ||
79 | + m.UpdateAt = time.Now() | ||
80 | + var num int64 | ||
81 | + if num, err = om.Update(m, cols...); err == nil { | ||
82 | + log.Info("Number of records updated in database:%d", num) | ||
83 | + } | ||
84 | + return | ||
85 | +} |
models/rank_period.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "oppmg/common/log" | ||
5 | + "time" | ||
6 | + | ||
7 | + "github.com/astaxie/beego/orm" | ||
8 | +) | ||
9 | + | ||
10 | +type RankPeriod struct { | ||
11 | + Id int64 `orm:"column(id);auto" description:"主键"` | ||
12 | + CompanyId int64 `orm:"column(company_id);null" description:"公司编号 表company.id"` | ||
13 | + SeasonName string `orm:"column(season_name);size(50);null" description:"赛季名称"` | ||
14 | + RankTypeId int64 `orm:"column(rank_type_id);size(50);null" description:"赛季类型id"` | ||
15 | + BeginTime time.Time `orm:"column(begin_time);type(timestamp);null" description:"开始时间"` | ||
16 | + EndTime time.Time `orm:"column(end_time);type(timestamp);null" description:"结束时间"` | ||
17 | + CreateAt time.Time `orm:"column(create_at);type(timestamp);null" description:"创建时间"` | ||
18 | + UpdateAt time.Time `orm:"column(update_at);type(timestamp);null" description:"更新时间"` | ||
19 | + Status int8 `orm:"column(status);null" description:"状态 0:未开始 1:开始 2:结束 "` | ||
20 | + RankRangeBack string `orm:"column(rank_range_back)" description:"赛季结束时,备份赛季参与人设置"` | ||
21 | + RankItemBack string `orm:"column(rank_item_back)" description:"赛季结束时,备份赛季评比项设置"` | ||
22 | + IsAuto int `orm:"column(is_auto)" description:"是否是自动创建的赛季【0:不是】【1:是】"` | ||
23 | +} | ||
24 | + | ||
25 | +func (t *RankPeriod) TableName() string { | ||
26 | + return "rank_period" | ||
27 | +} | ||
28 | + | ||
29 | +func init() { | ||
30 | + orm.RegisterModel(new(RankPeriod)) | ||
31 | +} | ||
32 | + | ||
33 | +//状态 0:未开始 1:开始 2:结束 | ||
34 | +const ( | ||
35 | + RANKPERIOD_STATUS_NOT int8 = 0 | ||
36 | + RANKPERIOD_STATUS_BEGIN int8 = 1 | ||
37 | + RANKPERIOD_STATUS_END int8 = 2 | ||
38 | +) | ||
39 | + | ||
40 | +// AddNewRankPeriod insert a new RankPeriod into database and returns | ||
41 | +// last inserted Id on success. | ||
42 | +func AddRankPeriod(m *RankPeriod) (id int64, err error) { | ||
43 | + o := orm.NewOrm() | ||
44 | + m.CreateAt = time.Now() | ||
45 | + m.UpdateAt = time.Now() | ||
46 | + id, err = o.Insert(m) | ||
47 | + return | ||
48 | +} | ||
49 | + | ||
50 | +// GetNewRankPeriodById retrieves RankPeriod by Id. Returns error if | ||
51 | +// Id doesn't exist | ||
52 | +func GetRankPeriodById(id int64) (v *RankPeriod, err error) { | ||
53 | + o := orm.NewOrm() | ||
54 | + v = &RankPeriod{Id: id} | ||
55 | + if err = o.Read(v); err == nil { | ||
56 | + return v, nil | ||
57 | + } | ||
58 | + return nil, err | ||
59 | +} | ||
60 | + | ||
61 | +// UpdateNewRankPeriod updates RankPeriod by Id and returns error if | ||
62 | +// the record to be updated doesn't exist | ||
63 | +func UpdateRankPeriodById(m *RankPeriod, cols []string) (err error) { | ||
64 | + o := orm.NewOrm() | ||
65 | + m.UpdateAt = time.Now() | ||
66 | + if len(cols) > 0 { | ||
67 | + cols = append(cols, "UpdateAt") | ||
68 | + } | ||
69 | + var num int64 | ||
70 | + if num, err = o.Update(m, cols...); err == nil { | ||
71 | + log.Info("Number of records updated in database:", num) | ||
72 | + } | ||
73 | + | ||
74 | + return | ||
75 | +} |
models/rank_range.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "oppmg/common/log" | ||
6 | + "time" | ||
7 | + | ||
8 | + "github.com/astaxie/beego/orm" | ||
9 | +) | ||
10 | + | ||
11 | +type RankRange struct { | ||
12 | + Id int64 `orm:"column(id);auto"` | ||
13 | + Name string `orm:"column(name);size(50);null" description:"名称"` | ||
14 | + CompanyId int64 `orm:"column(company_id);null" description:"公司编号 表company.id"` | ||
15 | + RankTypeId int64 `orm:"column(rank_type_id);null" description:""` | ||
16 | + Type int8 `orm:"column(type);null" description:"1:所有员工 2:指定员工 3:所有部门 4:指定部门"` | ||
17 | + Data string `orm:"column(data);size(1000);null" description:"人员范围数据(type:2,4 有值 对于人员数据/部门数据)"` | ||
18 | + CreateAt time.Time `orm:"column(create_at);type(timestamp);null" description:"创建时间"` | ||
19 | + UpdateAt time.Time `orm:"column(update_at);type(timestamp);null" description:"更新时间"` | ||
20 | + SortNum int `orm:"column(sort_num)"` | ||
21 | + Status int8 `orm:"column(status)"` | ||
22 | +} | ||
23 | + | ||
24 | +func (t *RankRange) TableName() string { | ||
25 | + return "rank_range" | ||
26 | +} | ||
27 | + | ||
28 | +func init() { | ||
29 | + orm.RegisterModel(new(RankRange)) | ||
30 | +} | ||
31 | + | ||
32 | +//1:所有员工 2:指定员工 3:所有部门 4:指定部门 | ||
33 | +const ( | ||
34 | + RANK_RANGE_TYPE_EMPLAYEEALL int8 = 1 | ||
35 | + RANK_RANGE_TYPE_EMPLAYEE int8 = 2 | ||
36 | + RANK_RANGE_TYPE_DEPARTMENTALL int8 = 3 | ||
37 | + RANK_RANGE_TYPE_DEPARTMENT int8 = 4 | ||
38 | +) | ||
39 | + | ||
40 | +// AddRankRange insert a new RankRange into database and returns | ||
41 | +// last inserted Id on success. | ||
42 | +func AddRankRange(m *RankRange, om ...orm.Ormer) (id int64, err error) { | ||
43 | + var o orm.Ormer | ||
44 | + if len(om) > 0 { | ||
45 | + o = om[0] | ||
46 | + } else { | ||
47 | + o = orm.NewOrm() | ||
48 | + } | ||
49 | + m.CreateAt = time.Now() | ||
50 | + m.UpdateAt = time.Now() | ||
51 | + id, err = o.Insert(m) | ||
52 | + return | ||
53 | +} | ||
54 | + | ||
55 | +// GetRankRangeById retrieves RankRange by Id. Returns error if | ||
56 | +// Id doesn't exist | ||
57 | +func GetRankRangeById(id int64) (v *RankRange, err error) { | ||
58 | + o := orm.NewOrm() | ||
59 | + v = &RankRange{Id: id} | ||
60 | + if err = o.Read(v); err == nil { | ||
61 | + return v, nil | ||
62 | + } | ||
63 | + return nil, err | ||
64 | +} | ||
65 | + | ||
66 | +// UpdateRankRangeById updates RankRange by Id and returns error if | ||
67 | +// the record to be updated doesn't exist | ||
68 | +func UpdateRankRangeById(m *RankRange, cols []string, om ...orm.Ormer) (err error) { | ||
69 | + var o orm.Ormer | ||
70 | + if len(om) > 0 { | ||
71 | + o = om[0] | ||
72 | + } else { | ||
73 | + o = orm.NewOrm() | ||
74 | + } | ||
75 | + var num int64 | ||
76 | + m.UpdateAt = time.Now() | ||
77 | + if len(cols) > 0 { | ||
78 | + cols = append(cols, "UpdateAt") | ||
79 | + } | ||
80 | + if num, err = o.Update(m, cols...); err == nil { | ||
81 | + log.Info("Number of records updated in database:%d", num) | ||
82 | + } | ||
83 | + return | ||
84 | +} | ||
85 | + | ||
86 | +// DeleteRankRange deletes RankRange by Id and returns error if | ||
87 | +// the record to be deleted doesn't exist | ||
88 | +func DeleteRankRange(id int64) (err error) { | ||
89 | + o := orm.NewOrm() | ||
90 | + v := RankRange{Id: id} | ||
91 | + // ascertain id exists in the database | ||
92 | + if err = o.Read(&v); err == nil { | ||
93 | + var num int64 | ||
94 | + if num, err = o.Delete(&RankRange{Id: id}); err == nil { | ||
95 | + fmt.Println("Number of records deleted in database:", num) | ||
96 | + } | ||
97 | + } | ||
98 | + return | ||
99 | +} |
models/rank_range_data.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "github.com/astaxie/beego/orm" | ||
5 | +) | ||
6 | + | ||
7 | +type RankRangeData struct { | ||
8 | + Id int64 `orm:"column(id);auto"` | ||
9 | + RankRangeId int64 `orm:"column(rank_range_id)"` | ||
10 | + RangeType int8 `orm:"column(range_type);" description:"类型"` | ||
11 | + RelationId int64 `orm:"column(relation_id);"` | ||
12 | + RankTypeId int64 `orm:"column(rank_type_id)"` | ||
13 | +} | ||
14 | + | ||
15 | +func (t *RankRangeData) TableName() string { | ||
16 | + return "rank_range_data" | ||
17 | +} | ||
18 | + | ||
19 | +func init() { | ||
20 | + orm.RegisterModel(new(RankRangeData)) | ||
21 | +} | ||
22 | + | ||
23 | +// AddRankRangeData insert a new RankRangeData into database and returns | ||
24 | +// last inserted Id on success. | ||
25 | +func AddRankRangeDataMulti(m []RankRangeData, om ...orm.Ormer) (successNums int64, err error) { | ||
26 | + var o orm.Ormer | ||
27 | + if len(om) > 0 { | ||
28 | + o = om[0] | ||
29 | + } else { | ||
30 | + o = orm.NewOrm() | ||
31 | + } | ||
32 | + successNums, err = o.InsertMulti(20, m) | ||
33 | + return | ||
34 | +} | ||
35 | + | ||
36 | +// GetRankRangeDataById retrieves RankRangeData by Id. Returns error if | ||
37 | +// Id doesn't exist | ||
38 | +func GetRankRangeDataById(id int64) (v *RankRangeData, err error) { | ||
39 | + o := orm.NewOrm() | ||
40 | + v = &RankRangeData{Id: id} | ||
41 | + if err = o.Read(v); err == nil { | ||
42 | + return v, nil | ||
43 | + } | ||
44 | + return nil, err | ||
45 | +} | ||
46 | + | ||
47 | +// DeleteRankRangeData deletes RankRangeData by Id and returns error if | ||
48 | +// the record to be deleted doesn't exist | ||
49 | +func DeleteRankRangeData(id []int64, om orm.Ormer) (err error) { | ||
50 | + | ||
51 | + _, err = om.QueryTable(&RankRangeData{}). | ||
52 | + Filter("id__in", id). | ||
53 | + Delete() | ||
54 | + return err | ||
55 | +} | ||
56 | + | ||
57 | +func GetRankRangeDataByRangeId(id int64) ([]RankRangeData, error) { | ||
58 | + var ( | ||
59 | + data = make([]RankRangeData, 0) | ||
60 | + err error | ||
61 | + ) | ||
62 | + o := orm.NewOrm() | ||
63 | + _, err = o.QueryTable(&RankRangeData{}). | ||
64 | + Filter("rank_range_id", id). | ||
65 | + All(&data) | ||
66 | + if err == orm.ErrNoRows { | ||
67 | + return data, nil | ||
68 | + } | ||
69 | + if err != nil { | ||
70 | + return nil, err | ||
71 | + } | ||
72 | + return data, nil | ||
73 | +} |
models/rank_type.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "time" | ||
6 | + | ||
7 | + "github.com/astaxie/beego/orm" | ||
8 | +) | ||
9 | + | ||
10 | +type RankType struct { | ||
11 | + Id int64 `orm:"column(id);pk"` | ||
12 | + CompanyId int64 `orm:"column(company_id)"` | ||
13 | + Name string `orm:"column(name)"` | ||
14 | + EnableStatus int8 `orm:"column(enable_status)"` | ||
15 | + CreateAt time.Time `orm:"column(create_at);type(timestamp);null" description:"创建时间"` | ||
16 | + UpdateAt time.Time `orm:"column(update_at);type(timestamp);null" description:"更新时间"` | ||
17 | + Type int8 `orm:"column(type)"` | ||
18 | + AutoCreate int8 `orm:"column(auto_create)"` //是否自动创建赛季 【0:否】【1:是】 | ||
19 | + AutoPeriod int `orm:"column(auto_period)"` | ||
20 | +} | ||
21 | + | ||
22 | +func (t *RankType) TableName() string { | ||
23 | + return "rank_type" | ||
24 | +} | ||
25 | + | ||
26 | +func init() { | ||
27 | + orm.RegisterModel(new(RankType)) | ||
28 | +} | ||
29 | + | ||
30 | +//榜单类型 | ||
31 | +const ( | ||
32 | + RANK_TYPE_SEASON int8 = 1 //季赛榜 | ||
33 | + RANK_TYPE_YEAR int8 = 2 //年榜 | ||
34 | +) | ||
35 | + | ||
36 | +//榜单状态 | ||
37 | +const ( | ||
38 | + RANK_STATUS_YES int8 = 2 //启用 | ||
39 | + RANK_STATUS_NO int8 = 1 //禁用 | ||
40 | +) | ||
41 | + | ||
42 | +// AddRank insert a new Rank into database and returns | ||
43 | +// last inserted Id on success. | ||
44 | +func AddRank(m *RankType) (id int64, err error) { | ||
45 | + o := orm.NewOrm() | ||
46 | + nowTime := time.Now() | ||
47 | + m.CreateAt = nowTime | ||
48 | + m.UpdateAt = nowTime | ||
49 | + id, err = o.Insert(m) | ||
50 | + return | ||
51 | +} | ||
52 | + | ||
53 | +// GetRankById retrieves Rank by Id. Returns error if | ||
54 | +// Id doesn't exist | ||
55 | +func GetRankById(id int64) (v *RankType, err error) { | ||
56 | + o := orm.NewOrm() | ||
57 | + v = &RankType{Id: id} | ||
58 | + if err = o.Read(v); err == nil { | ||
59 | + return v, nil | ||
60 | + } | ||
61 | + return nil, err | ||
62 | +} | ||
63 | + | ||
64 | +// UpdateRank updates Rank by Id and returns error if | ||
65 | +// the record to be updated doesn't exist | ||
66 | +func UpdateRankById(m *RankType, cols []string, om ...orm.Ormer) (err error) { | ||
67 | + var o orm.Ormer | ||
68 | + if len(om) > 0 { | ||
69 | + o = om[0] | ||
70 | + } else { | ||
71 | + o = orm.NewOrm() | ||
72 | + } | ||
73 | + m.UpdateAt = time.Now() | ||
74 | + if len(cols) > 0 { | ||
75 | + cols = append(cols, "UpdateAt") | ||
76 | + } | ||
77 | + var num int64 | ||
78 | + if num, err = o.Update(m, cols...); err == nil { | ||
79 | + fmt.Println("Number of records updated in database:", num) | ||
80 | + } | ||
81 | + | ||
82 | + return | ||
83 | +} |
@@ -19,6 +19,21 @@ type UserCompany struct { | @@ -19,6 +19,21 @@ type UserCompany struct { | ||
19 | UpdateAt time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"` | 19 | UpdateAt time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"` |
20 | Enable int8 `orm:"column(enable)"` | 20 | Enable int8 `orm:"column(enable)"` |
21 | DeleteAt time.Time `orm:"column(delete_at)"` | 21 | DeleteAt time.Time `orm:"column(delete_at)"` |
22 | + OpenId int64 `orm:"column(open_id)" description:"统一用户中心uid"` | ||
23 | + Sex int8 `orm:"column(sex)" description:"性别:0保密 1男 2女"` | ||
24 | + JobNum string `orm:"column(job_num);size(255)" description:"员工工号"` | ||
25 | + Phone string `orm:"column(phone);size(11)" description:"用户手机,登录手机号"` | ||
26 | + PrivatePhone string `orm:"column(private_phone);size(11)" description:"私人手机"` | ||
27 | + Email string `orm:"column(email);size(255)" description:"邮箱"` | ||
28 | + ExtensionNum string `orm:"column(extension_num);size(255)" description:"分机号"` | ||
29 | + EntryTime time.Time `orm:"column(entry_time);type(date);null" description:"入职时间"` | ||
30 | + Workspace string `orm:"column(workspace);size(255)" description:"工作地点"` | ||
31 | + IsBusiness int8 `orm:"column(is_business)" description:"是否开启业务状态 1是 0否"` | ||
32 | + Avatar string `orm:"column(avatar);size(255)" description:"头像"` | ||
33 | + Remarks string `orm:"column(remarks);size(255)" description:"备注"` | ||
34 | + AdminType int8 `orm:"column(admin_type)" description:"1普通用户 2主管理员"` | ||
35 | + ChargeStatus int8 `orm:"column(charge_status)" description:"是否为当前公司主管 1 是2 否"` | ||
36 | + ExtraText string `orm:"column(extra_text);null" description:"自定义参数数据"` | ||
22 | } | 37 | } |
23 | 38 | ||
24 | func (t *UserCompany) TableName() string { | 39 | func (t *UserCompany) TableName() string { |
@@ -31,6 +46,20 @@ const ( | @@ -31,6 +46,20 @@ const ( | ||
31 | USERCOMPANY_ENABLE_NO int8 = 2 // 无效 | 46 | USERCOMPANY_ENABLE_NO int8 = 2 // 无效 |
32 | ) | 47 | ) |
33 | 48 | ||
49 | +//是否为当前公司主管 1 是2 否 | ||
50 | +const ( | ||
51 | + USERCOMPANY_CHARGE_YES int8 = 1 | ||
52 | + USERCOMPANY_CHARGE_NO int8 = 2 | ||
53 | +) | ||
54 | + | ||
55 | +// | ||
56 | + | ||
57 | +// 1普通用户 2主管理员 | ||
58 | +const ( | ||
59 | + USERCOMPANY_ADMIN_SUBSET int8 = 1 | ||
60 | + USERCOMPANY_ADMIN_MAIN int8 = 2 | ||
61 | +) | ||
62 | + | ||
34 | func (t *UserCompany) IsEnable() bool { | 63 | func (t *UserCompany) IsEnable() bool { |
35 | switch t.Enable { | 64 | switch t.Enable { |
36 | case USERCOMPANY_ENABLE_YES: | 65 | case USERCOMPANY_ENABLE_YES: |
@@ -62,6 +91,17 @@ func GetUserCompanyById(id int64) (v *UserCompany, err error) { | @@ -62,6 +91,17 @@ func GetUserCompanyById(id int64) (v *UserCompany, err error) { | ||
62 | return nil, err | 91 | return nil, err |
63 | } | 92 | } |
64 | 93 | ||
94 | +func GetUserCompanyByIds(ids []int64) (v []UserCompany, err error) { | ||
95 | + if len(ids) == 0 { | ||
96 | + return nil, nil | ||
97 | + } | ||
98 | + o := orm.NewOrm() | ||
99 | + _, err = o.QueryTable(&UserCompany{}). | ||
100 | + Filter("id__in", ids). | ||
101 | + All(&v) | ||
102 | + return v, err | ||
103 | +} | ||
104 | + | ||
65 | // AddUserCompany insert a new UserCompany into database and returns | 105 | // AddUserCompany insert a new UserCompany into database and returns |
66 | // last inserted Id on success. | 106 | // last inserted Id on success. |
67 | func AddUserCompany(m *UserCompany, o orm.Ormer) (id int64, err error) { | 107 | func AddUserCompany(m *UserCompany, o orm.Ormer) (id int64, err error) { |
@@ -148,8 +188,8 @@ func GetUserCompanyReal(ids []int64) ([]UserCompany, error) { | @@ -148,8 +188,8 @@ func GetUserCompanyReal(ids []int64) ([]UserCompany, error) { | ||
148 | func GetUserCompanyAll(companyId int64) (v []*UserCompany, err error) { | 188 | func GetUserCompanyAll(companyId int64) (v []*UserCompany, err error) { |
149 | o := orm.NewOrm() | 189 | o := orm.NewOrm() |
150 | sql := `select a.*,b.nick_name from ( | 190 | sql := `select a.*,b.nick_name from ( |
151 | -select id,user_id from user_company where company_id=? and enable=1 | ||
152 | -)a inner join user b on a.user_id = b.id` | 191 | + select id,user_id from user_company where company_id=? and enable=1 |
192 | + )a inner join user b on a.user_id = b.id` | ||
153 | if _, err = o.Raw(sql, companyId).QueryRows(&v); err == nil { | 193 | if _, err = o.Raw(sql, companyId).QueryRows(&v); err == nil { |
154 | return v, nil | 194 | return v, nil |
155 | } | 195 | } |
@@ -105,3 +105,14 @@ func ExistUserDepart(departid int64, usercompanyid int64) bool { | @@ -105,3 +105,14 @@ func ExistUserDepart(departid int64, usercompanyid int64) bool { | ||
105 | Exist() | 105 | Exist() |
106 | return ok | 106 | return ok |
107 | } | 107 | } |
108 | + | ||
109 | +func GetUserDepartment(departId, usercompanyid int64) (*UserDepartment, error) { | ||
110 | + m := &UserDepartment{} | ||
111 | + o := orm.NewOrm() | ||
112 | + err := o.QueryTable(&UserDepartment{}). | ||
113 | + Filter("department_id", departId). | ||
114 | + Filter("user_company_id", usercompanyid). | ||
115 | + Filter("enable_status", USER_DEPARTMENT_ENABLE_YES). | ||
116 | + One(m) | ||
117 | + return m, err | ||
118 | +} |
@@ -8,8 +8,7 @@ import ( | @@ -8,8 +8,7 @@ import ( | ||
8 | ) | 8 | ) |
9 | 9 | ||
10 | type UserPosition struct { | 10 | type UserPosition struct { |
11 | - Id int64 `orm:"column(id)" description:"唯一键值"` | ||
12 | - //UserId int64 `orm:"column(user_id)" description:"表user.id 用户编号"` | 11 | + Id int64 `orm:"column(id)" description:"唯一键值"` |
13 | PositionId int64 `orm:"column(position_id)" description:"表position.id 职位编号"` | 12 | PositionId int64 `orm:"column(position_id)" description:"表position.id 职位编号"` |
14 | CreateAt time.Time `orm:"column(create_at);type(timestamp);null" description:"创建时间"` | 13 | CreateAt time.Time `orm:"column(create_at);type(timestamp);null" description:"创建时间"` |
15 | CompanyId int64 `orm:"column(company_id)" description:"表company.id 公司编号"` | 14 | CompanyId int64 `orm:"column(company_id)" description:"表company.id 公司编号"` |
protocol/achievement.go
0 → 100644
1 | +package protocol | ||
2 | + | ||
3 | +//ProviderData 成果提供者 | ||
4 | +type AchievementProvider struct { | ||
5 | + UserDepartmentId int64 `json:"user_department_id" orm:"-"` //前端需要的唯一id标识,使用user_department表的id | ||
6 | + UserCompanyId int64 `json:"user_company_id" orm:"column(user_company_id)"` //用户的id | ||
7 | + NickName string `json:"nick_name" orm:"column(nick_name)"` | ||
8 | + DepartmentId int64 `json:"department_id" orm:"column(department_id)" ` //部门id | ||
9 | + DepartmentName string `json:"department_name" orm:"column(department_name)"` | ||
10 | + UserGraspScore float64 `json:"user_grasp_score" orm:"column(user_grasp_score)"` //把握人得分 | ||
11 | +} | ||
12 | + | ||
13 | +//AchievementChance 成果的机会列表 | ||
14 | +type AchievementChance struct { | ||
15 | + Id string `json:"id"` //大整数特别处理 | ||
16 | + Code string `json:"code"` | ||
17 | +} | ||
18 | + | ||
19 | +type AchievementImage struct { | ||
20 | + Path string `json:"path"` | ||
21 | + W int `json:"-"` | ||
22 | + H int `json:"-"` | ||
23 | +} | ||
24 | + | ||
25 | +//RequestAddAchievement 添加成果 | ||
26 | +type RequestAddAchievement struct { | ||
27 | + ChanceData []AchievementChance `json:"chance_data"` | ||
28 | + ChanceTypeId int64 `json:"chance_type_id"` //机会一级分类 chance_type | ||
29 | + AuditTemplateId int64 `json:"audit_template_id"` //机会二级分类 | ||
30 | + DepartmentId int64 `json:"department_id"` //把握人的部门 | ||
31 | + UserCompanyId int64 `json:"user_company_id"` //把握人的id | ||
32 | + GraspScore float64 `json:"grasp_score"` //把握分 | ||
33 | + UserGraspScore float64 `json:"user_grasp_score"` //把握人总得分 | ||
34 | + Provider []AchievementProvider `json:"provider"` //机会提供者 | ||
35 | + SourceContent string `json:"source_content"` //成果描述文本 | ||
36 | + Images []AchievementImage `json:"image"` //图片 | ||
37 | +} | ||
38 | + | ||
39 | +//RequestAddAchievement 添加成果 | ||
40 | +type RequestEditAchievement struct { | ||
41 | + AchievementId int64 `json:"achievement_id"` | ||
42 | + ChanceData []AchievementChance `json:"chance_data"` | ||
43 | + ChanceTypeId int64 `json:"chance_type_id"` //机会一级分类 chance_type | ||
44 | + AuditTemplateId int64 `json:"audit_template_id"` //机会二级分类 | ||
45 | + GraspScore float64 `json:"grasp_score"` //把握分 | ||
46 | + UserGraspScore float64 `json:"user_grasp_score"` //把握人总得分 | ||
47 | + SourceContent string `json:"source_content"` //成果描述文本 | ||
48 | + Provider []AchievementProvider `json:"provider"` //机会提供者 | ||
49 | + Images []AchievementImage `json:"image"` //图片 | ||
50 | +} | ||
51 | + | ||
52 | +// ResponseRankSeasonList 赛季列表 | ||
53 | +type AchievementList struct { | ||
54 | + ResponsePageInfo | ||
55 | + List []AchievementListItem `json:"lists"` | ||
56 | +} | ||
57 | + | ||
58 | +//AchievementListItem 成果列表 | ||
59 | +type AchievementListItem struct { | ||
60 | + Id int64 `json:"id"` | ||
61 | + CreateTime string `json:"create_time"` | ||
62 | + TypeA string `json:"type_a"` | ||
63 | + TypeB string `json:"type_b"` | ||
64 | + GraspScore string `json:"grasp_score"` | ||
65 | + Status int `json:"status"` | ||
66 | + UserGrasp string `json:"user_grasp"` | ||
67 | +} | ||
68 | + | ||
69 | +//ResponseAchievementInfo 成果详情 | ||
70 | +type ResponseAchievementInfo struct { | ||
71 | + AchievementId int64 `json:"achievement_id"` | ||
72 | + ChanceData []AchievementChance `json:"chance_data"` | ||
73 | + ChanceTypeId int64 `json:"chance_type_id"` //机会一级分类 chance_type | ||
74 | + AuditTemplateId int64 `json:"audit_template_id"` //机会二级分类 | ||
75 | + ChanceTypeName string `json:"chance_type_name"` //机会一级分类 chance_type | ||
76 | + AuditTemplateName string `json:"audit_template_name"` //机会二级分类 | ||
77 | + DepartmentId int64 `json:"department_id"` //把握人的部门 | ||
78 | + DeparmentName string `json:"department_name"` | ||
79 | + UserCompanyId int64 `json:"user_company_id"` //把握人的id | ||
80 | + NickName string `json:"nick_name"` | ||
81 | + UserDepartmentId int64 `json:"user_department_id"` //前端需要的把握人唯一id标识 | ||
82 | + GraspScore float64 `json:"grasp_score"` //把握分 | ||
83 | + UserGraspScore float64 `json:"user_grasp_score"` //把握人总得分 | ||
84 | + Provider []AchievementProvider `json:"provider"` //机会提供者 | ||
85 | + SourceContent string `json:"source_content"` //成果描述文本 | ||
86 | + Images []AchievementImage `json:"image"` //图片 | ||
87 | + CrreateAt string `json:"create_at"` | ||
88 | +} |
@@ -271,8 +271,10 @@ type RspAuditList struct { | @@ -271,8 +271,10 @@ type RspAuditList struct { | ||
271 | } | 271 | } |
272 | 272 | ||
273 | type ChanceFlowLog struct { | 273 | type ChanceFlowLog struct { |
274 | + Id int64 `json:"id" orm:"column(id)"` | ||
274 | ChanceId string `json:"chance_id" orm:"column(chance_id)"` | 275 | ChanceId string `json:"chance_id" orm:"column(chance_id)"` |
275 | CreateAt string `json:"create_at" orm:"column(create_at)"` | 276 | CreateAt string `json:"create_at" orm:"column(create_at)"` |
276 | Content string `json:"content" orm:"column(content)"` | 277 | Content string `json:"content" orm:"column(content)"` |
277 | NickName string `json:"nick_name" orm:"column(nick_name)"` | 278 | NickName string `json:"nick_name" orm:"column(nick_name)"` |
279 | + Code int `json:"code" orm:"column(code)"` | ||
278 | } | 280 | } |
@@ -77,3 +77,37 @@ type ChanceTypeBase struct { | @@ -77,3 +77,37 @@ type ChanceTypeBase struct { | ||
77 | ChanceTypeId int64 `orm:"column(chance_type_id)" json:"chance_type_id"` | 77 | ChanceTypeId int64 `orm:"column(chance_type_id)" json:"chance_type_id"` |
78 | Name string `orm:"column(name)" json:"name"` | 78 | Name string `orm:"column(name)" json:"name"` |
79 | } | 79 | } |
80 | + | ||
81 | +type SelectCompanyUserListItem struct { | ||
82 | + Id int64 `json:"id" orm:"column(id)"` | ||
83 | + UserCompanyId int64 `json:"user_company_id" orm:"column(user_company_id)"` | ||
84 | + NickName string `json:"nick_name" orm:"column(nick_name)"` | ||
85 | + DepartmentId int64 `json:"department_id" orm:"column(department_id)"` | ||
86 | + DepartmentName string `json:"department_name" orm:"column(department_name)"` | ||
87 | +} | ||
88 | + | ||
89 | +//下拉选择公司员工 | ||
90 | +type SelectCompanyUserList struct { | ||
91 | + ResponsePageInfo | ||
92 | + List []SelectCompanyUserListItem `json:"lists"` | ||
93 | +} | ||
94 | + | ||
95 | +type SelectChanceListItem struct { | ||
96 | + Id string `json:"id" orm:"column(id)"` | ||
97 | + DepartmentId int64 `json:"deparment_id" orm:"column(department_id)"` | ||
98 | + DepartmentName string `json:"department_name" orm:"-"` | ||
99 | + ChanceTypeId int `json:"chance_type_id" orm:"column(chance_type_id)"` | ||
100 | + ChanceTypeName string `json:"chance_type_name" orm:"-"` | ||
101 | + AuditTemplateId int64 `json:"audit_template_id" orm:"column(audit_template_id)"` | ||
102 | + AuditTemplateName string `json:"audit_template_name" orm:"-"` | ||
103 | + UserId int64 `json:"user_id" orm:"column(user_id)"` | ||
104 | + UserName string `json:"user_name" orm:"column(nick_name)"` | ||
105 | + Code string `json:"code" orm:"column(code)"` | ||
106 | + CreateAt string `json:"create_at" orm:"column(create_at)"` | ||
107 | +} | ||
108 | + | ||
109 | +//下拉选择机会 | ||
110 | +type SelectChanceList struct { | ||
111 | + ResponsePageInfo | ||
112 | + List []SelectChanceListItem `json:"lists"` | ||
113 | +} |
@@ -110,8 +110,8 @@ func NewReturnResponse(data interface{}, eRR error) (msg *ResponseMessage) { | @@ -110,8 +110,8 @@ func NewReturnResponse(data interface{}, eRR error) (msg *ResponseMessage) { | ||
110 | if x, ok := eRR.(CustomErrParse); ok { | 110 | if x, ok := eRR.(CustomErrParse); ok { |
111 | return x.ParseToMessage() | 111 | return x.ParseToMessage() |
112 | } | 112 | } |
113 | - | ||
114 | - return NewMessage("1") | 113 | + msg = NewMessage("1") |
114 | + return | ||
115 | } | 115 | } |
116 | 116 | ||
117 | //BadRequestParam 控制层响应返回 | 117 | //BadRequestParam 控制层响应返回 |
@@ -36,6 +36,7 @@ var errmessge ErrorMap = map[string]string{ | @@ -36,6 +36,7 @@ var errmessge ErrorMap = map[string]string{ | ||
36 | "10028": "请输入正确的验证码", | 36 | "10028": "请输入正确的验证码", |
37 | "10029": "获取验证码失败", | 37 | "10029": "获取验证码失败", |
38 | "10080": "无操作权限", | 38 | "10080": "无操作权限", |
39 | + "10111": "获取公司信息失败", | ||
39 | 40 | ||
40 | //用户相关 | 41 | //用户相关 |
41 | "10031": "无效角色", | 42 | "10031": "无效角色", |
@@ -106,6 +107,22 @@ var errmessge ErrorMap = map[string]string{ | @@ -106,6 +107,22 @@ var errmessge ErrorMap = map[string]string{ | ||
106 | "12102": "评分规则不符合要求", | 107 | "12102": "评分规则不符合要求", |
107 | //权限配置相关 | 108 | //权限配置相关 |
108 | "10091": "至少选择一个特定部门", | 109 | "10091": "至少选择一个特定部门", |
110 | + | ||
111 | + "10101": "赛季周期设置与其他赛季重叠", | ||
112 | + "10102": "参与人类型不一致", | ||
113 | + "10103": "排行榜名称最多5个字符", | ||
114 | + "10104": "赛季名称最多输入20个字符", | ||
115 | + "10105": "赛季开始时间必填", | ||
116 | + "10106": "赛季结束时间必填", | ||
117 | + "10107": "参与范围名称最多输入5个字符", | ||
118 | + "10108": "成果一级分类必填", | ||
119 | + "10109": "成果来源必填", | ||
120 | + "10110": "把握人得分不可大于把握得分", | ||
121 | + "10121": "把握得分必填,0.1-100", | ||
122 | + "10122": "分配的总分不可大于把握分", | ||
123 | + "10123": "排行榜评比项最多4项", | ||
124 | + "10124": "公司未启用该模块", | ||
125 | + "10125": "参与范围名称不能重复", | ||
109 | } | 126 | } |
110 | 127 | ||
111 | //错误码转换 ,兼容需要 | 128 | //错误码转换 ,兼容需要 |
protocol/rank.go
0 → 100644
1 | +package protocol | ||
2 | + | ||
3 | +//获取公司的榜单类型列表 | ||
4 | +type ResponseRankType struct { | ||
5 | + Id int `json:"id" orm:"column(id)"` | ||
6 | + Name string `json:"name" orm:"column(name)"` | ||
7 | + EnableStatus int8 `json:"enable_status" orm:"column(enable_status)"` | ||
8 | + Type int8 `json:"type" orm:"column(type)"` | ||
9 | +} | ||
10 | + | ||
11 | +// ResponseRankSeasonList 赛季列表 | ||
12 | +type ResponseRankSeasonList struct { | ||
13 | + ResponsePageInfo | ||
14 | + List []RankSeasonItem `json:"lists"` | ||
15 | +} | ||
16 | +type RankSeasonItem struct { | ||
17 | + Id int64 `json:"id" orm:"column(id)"` | ||
18 | + Name string `json:"name" orm:"column(season_name)"` | ||
19 | + BeginTime string `json:"begin_time" orm:"column(begin_time)"` | ||
20 | + EndTime string `json:"end_time" orm:"column(end_time)"` | ||
21 | + Status int8 `json:"status" orm:"column(status)"` | ||
22 | +} | ||
23 | + | ||
24 | +//RankRangeListItem 赛季参与人列表项 | ||
25 | +type RankRangeListItem struct { | ||
26 | + Id int64 `json:"id" orm:"column(id)"` | ||
27 | + Name string `json:"name" orm:"column(name)"` | ||
28 | + RangeType int8 `json:"range_type" orm:"column(type)"` | ||
29 | + Status int8 `json:"status" orm:"column(status)"` | ||
30 | + RangeData string `json:"range_data" orm:"-"` | ||
31 | + SortNum int `json:"sort_num"` | ||
32 | +} | ||
33 | + | ||
34 | +type RankRangeList []RankRangeListItem | ||
35 | + | ||
36 | +func (a RankRangeList) Len() int { return len(a) } | ||
37 | +func (a RankRangeList) Swap(i, j int) { a[i], a[j] = a[j], a[i] } | ||
38 | +func (a RankRangeList) Less(i, j int) bool { | ||
39 | + return a[i].SortNum < a[j].SortNum | ||
40 | +} | ||
41 | + | ||
42 | +//ResponseRankRangeInfo 赛季参与人详情 | ||
43 | +type ResponseRankRangeInfo struct { | ||
44 | + Id int64 `json:"id"` | ||
45 | + Name string `json:"name"` | ||
46 | + RangeType int8 `json:"range_type"` | ||
47 | + Relation []RankRangeRelation `json:"relation"` | ||
48 | +} | ||
49 | + | ||
50 | +type RankRangeRelation struct { | ||
51 | + Id int64 `json:"id"` | ||
52 | + Name string `json:"name"` | ||
53 | +} | ||
54 | + | ||
55 | +//排行榜评比项 | ||
56 | +type RankItemInfo struct { | ||
57 | + ItemName string `json:"item_name"` | ||
58 | + ItemKey string `json:"item_key"` | ||
59 | + SortNum int `json:"sort_num"` | ||
60 | +} | ||
61 | + | ||
62 | +type RankItemAll []RankItemInfo | ||
63 | + | ||
64 | +func (a RankItemAll) Len() int { return len(a) } | ||
65 | +func (a RankItemAll) Swap(i, j int) { a[i], a[j] = a[j], a[i] } | ||
66 | +func (a RankItemAll) Less(i, j int) bool { | ||
67 | + return a[i].SortNum < a[j].SortNum | ||
68 | +} |
@@ -75,6 +75,10 @@ func init() { | @@ -75,6 +75,10 @@ func init() { | ||
75 | beego.NSRouter("/user_and_department", &controllers.CommonController{}, "post:SelectorUserAndDepart"), | 75 | beego.NSRouter("/user_and_department", &controllers.CommonController{}, "post:SelectorUserAndDepart"), |
76 | beego.NSRouter("/default_image", &controllers.CommonController{}, "post:DefaultImage"), | 76 | beego.NSRouter("/default_image", &controllers.CommonController{}, "post:DefaultImage"), |
77 | beego.NSRouter("/role/user", &controllers.CommonController{}, "post:SelectorRoleUser"), | 77 | beego.NSRouter("/role/user", &controllers.CommonController{}, "post:SelectorRoleUser"), |
78 | + beego.NSRouter("/chance_type", &controllers.CommonController{}, "post:SelectorChanceType"), | ||
79 | + beego.NSRouter("/user", &controllers.CommonController{}, "post:SelectCompanyUserList"), | ||
80 | + beego.NSRouter("/chance", &controllers.CommonController{}, "post:SelectChanceList"), | ||
81 | + beego.NSRouter("/department/list", &controllers.CompanyController{}, "post:DepartmentList"), | ||
78 | ), | 82 | ), |
79 | beego.NSNamespace("/template", | 83 | beego.NSNamespace("/template", |
80 | beego.NSRouter("/add", &controllers.TemplateController{}, "post:TemplateAdd"), | 84 | beego.NSRouter("/add", &controllers.TemplateController{}, "post:TemplateAdd"), |
@@ -102,13 +106,43 @@ func init() { | @@ -102,13 +106,43 @@ func init() { | ||
102 | beego.NSRouter("/list/before", &controllers.AuditController{}, "post:AuditListBefore"), | 106 | beego.NSRouter("/list/before", &controllers.AuditController{}, "post:AuditListBefore"), |
103 | beego.NSRouter("/info", &controllers.AuditController{}, "post:AuditInfo"), | 107 | beego.NSRouter("/info", &controllers.AuditController{}, "post:AuditInfo"), |
104 | beego.NSRouter("/allow_forbid", &controllers.AuditController{}, "post:AllowForbidAudit"), | 108 | beego.NSRouter("/allow_forbid", &controllers.AuditController{}, "post:AllowForbidAudit"), |
109 | + beego.NSRouter("/revise/info", &controllers.AuditController{}, "post:GetChanceReviseLog"), | ||
110 | + ), | ||
111 | + beego.NSNamespace("/rank", | ||
112 | + beego.NSRouter("/type/list", &controllers.RankController{}, "post:GetRankType"), | ||
113 | + beego.NSRouter("/type/edit", &controllers.RankController{}, "post:EditRankType"), | ||
114 | + beego.NSRouter("/type/forbid_allow", &controllers.RankController{}, "post:RankTypeForbidAllow"), | ||
115 | + beego.NSRouter("/type/config_set", &controllers.RankController{}, "post:RankTypeConfigSet"), | ||
116 | + beego.NSRouter("/type/config_show", &controllers.RankController{}, "post:RankTypeConfigShow"), | ||
117 | + beego.NSRouter("/season/add", &controllers.RankController{}, "post:RankSeasonAdd"), | ||
118 | + beego.NSRouter("/season/list", &controllers.RankController{}, "post:RankSeasonList"), | ||
119 | + beego.NSRouter("/season/edit", &controllers.RankController{}, "post:RankSeasonEdit"), | ||
120 | + beego.NSRouter("/range/list", &controllers.RankController{}, "post:RankRangeList"), | ||
121 | + beego.NSRouter("/range/edit", &controllers.RankController{}, "post:RankRangeEdit"), | ||
122 | + beego.NSRouter("/range/add", &controllers.RankController{}, "post:RankRangeAdd"), | ||
123 | + beego.NSRouter("/range/forbid_allow", &controllers.RankController{}, "post:RankRangeForbidAllow"), | ||
124 | + beego.NSRouter("/range/info", &controllers.RankController{}, "post:RankRangeInfo"), | ||
125 | + beego.NSRouter("/range/sort", &controllers.RankController{}, "post:RankRangeSort"), | ||
126 | + beego.NSRouter("/range/move", &controllers.RankController{}, "post:RankRangeMove"), | ||
127 | + beego.NSRouter("/item/list", &controllers.RankController{}, "post:RankItemList"), | ||
128 | + beego.NSRouter("/item/edit", &controllers.RankController{}, "post:RankItemEdit"), | ||
129 | + ), | ||
130 | + beego.NSNamespace("/achievement", | ||
131 | + beego.NSRouter("/list", &controllers.AchievementController{}, "post:AchievementList"), | ||
132 | + beego.NSRouter("/add", &controllers.AchievementController{}, "post:AddAchievement"), | ||
133 | + beego.NSRouter("/edit", &controllers.AchievementController{}, "post:EditAchievement"), | ||
134 | + beego.NSRouter("/info", &controllers.AchievementController{}, "post:AchievementInfo"), | ||
135 | + beego.NSRouter("/delete", &controllers.AchievementController{}, "post:DeleteAchievement"), | ||
136 | + beego.NSRouter("/forbid_allow", &controllers.AchievementController{}, "post:ForbidAllowAchievement"), | ||
137 | + beego.NSRouter("/remain/score", &controllers.AchievementController{}, "post:AchievementScoreRemain"), | ||
105 | ), | 138 | ), |
106 | ) | 139 | ) |
107 | 140 | ||
108 | nsAuth := beego.NewNamespace("/auth", | 141 | nsAuth := beego.NewNamespace("/auth", |
109 | beego.NSBefore(middleware.AllowOption), | 142 | beego.NSBefore(middleware.AllowOption), |
110 | beego.NSBefore(middleware.LogRequestData), | 143 | beego.NSBefore(middleware.LogRequestData), |
111 | - beego.NSRouter("/login", &controllers.AuthController{}, "post:Login"), | 144 | + beego.NSRouter("/login_account", &controllers.AuthController{}, "post:Login"), |
145 | + beego.NSRouter("/login", &controllers.AuthController{}, "post:LoginSecretKey"), | ||
112 | beego.NSRouter("/startCaptcha", &controllers.AuthController{}, "post:RegisterGeetest"), | 146 | beego.NSRouter("/startCaptcha", &controllers.AuthController{}, "post:RegisterGeetest"), |
113 | beego.NSRouter("/verifyCaptcha", &controllers.AuthController{}, "post:ValidateGeetest"), | 147 | beego.NSRouter("/verifyCaptcha", &controllers.AuthController{}, "post:ValidateGeetest"), |
114 | beego.NSRouter("/login_sms", &controllers.AuthController{}, "post:LoginSms"), | 148 | beego.NSRouter("/login_sms", &controllers.AuthController{}, "post:LoginSms"), |
@@ -118,9 +152,9 @@ func init() { | @@ -118,9 +152,9 @@ func init() { | ||
118 | ) | 152 | ) |
119 | nsUcenter := beego.NewNamespace("/ucenter", | 153 | nsUcenter := beego.NewNamespace("/ucenter", |
120 | beego.NSBefore(middleware.LogRequestData), | 154 | beego.NSBefore(middleware.LogRequestData), |
121 | - beego.NSRouter("/company", &controllers.CompanyController{}, "post:InitCompany"), | 155 | + //beego.NSRouter("/company", &controllers.CompanyController{}, "post:InitCompany"),(废弃) |
122 | beego.NSRouter("/company/info", &controllers.CompanyController{}, "post:GetCompanyForUCenter"), | 156 | beego.NSRouter("/company/info", &controllers.CompanyController{}, "post:GetCompanyForUCenter"), |
123 | - beego.NSRouter("/company/edit", &controllers.CompanyController{}, "post:EditCompanyForUCenter"), | 157 | + //beego.NSRouter("/company/edit", &controllers.CompanyController{}, "post:EditCompanyForUCenter"),(废弃) |
124 | beego.NSRouter("/user/revoke", &controllers.CompanyController{}, "post:UserRevoke"), | 158 | beego.NSRouter("/user/revoke", &controllers.CompanyController{}, "post:UserRevoke"), |
125 | beego.NSRouter("/user/changePhone", &controllers.CompanyController{}, "post:UserChangePhone"), | 159 | beego.NSRouter("/user/changePhone", &controllers.CompanyController{}, "post:UserChangePhone"), |
126 | beego.NSRouter("/company/allow_forbid", &controllers.CompanyController{}, "post:AllowForidCompanyForUCenter"), | 160 | beego.NSRouter("/company/allow_forbid", &controllers.CompanyController{}, "post:AllowForidCompanyForUCenter"), |
@@ -129,6 +163,7 @@ func init() { | @@ -129,6 +163,7 @@ func init() { | ||
129 | beego.AddNamespace(nsV1) | 163 | beego.AddNamespace(nsV1) |
130 | beego.AddNamespace(nsAuth) | 164 | beego.AddNamespace(nsAuth) |
131 | beego.AddNamespace(nsUcenter) | 165 | beego.AddNamespace(nsUcenter) |
166 | + | ||
132 | beego.SetStaticPath("/log", beego.AppConfig.String("log_filename")) | 167 | beego.SetStaticPath("/log", beego.AppConfig.String("log_filename")) |
133 | beego.SetStaticPath("/file/opp", beego.AppConfig.String("file_save_path")) | 168 | beego.SetStaticPath("/file/opp", beego.AppConfig.String("file_save_path")) |
134 | beego.SetStaticPath("/static", "./static") | 169 | beego.SetStaticPath("/static", "./static") |
1 | package routers | 1 | package routers |
2 | 2 | ||
3 | +import ( | ||
4 | + "oppmg/controllers" | ||
5 | + "oppmg/middleware" | ||
6 | + | ||
7 | + "github.com/astaxie/beego" | ||
8 | +) | ||
9 | + | ||
3 | //从公司管理平台同步数据用 | 10 | //从公司管理平台同步数据用 |
4 | func init() { | 11 | func init() { |
5 | - //路由 | 12 | + nsPlatform := beego.NewNamespace("/platform", |
13 | + beego.NSBefore(middleware.LogRequestData), | ||
14 | + beego.NSRouter("/action", &controllers.PlatformController{}, "post:UpdateData"), | ||
15 | + beego.NSRouter("/admins_change", &controllers.PlatformController{}, "post:CompanyAdminChance"), | ||
16 | + ) | ||
17 | + beego.AddNamespace(nsPlatform) | ||
6 | } | 18 | } |
routers/router3.go
0 → 100644
1 | +package routers | ||
2 | + | ||
3 | +import ( | ||
4 | + "oppmg/services/crontab" | ||
5 | + | ||
6 | + "github.com/astaxie/beego" | ||
7 | + "github.com/astaxie/beego/context" | ||
8 | +) | ||
9 | + | ||
10 | +func init() { | ||
11 | + testNs := beego.NewNamespace("/test", | ||
12 | + beego.NSCond(func(ctx *context.Context) bool { | ||
13 | + if beego.BConfig.RunMode == "prod" { | ||
14 | + return false | ||
15 | + } | ||
16 | + return true | ||
17 | + }), | ||
18 | + beego.NSGet("/create_rank_peroid", | ||
19 | + func(ctx *context.Context) { | ||
20 | + crontab.AutoCreateRankPeriod() | ||
21 | + }), | ||
22 | + ) | ||
23 | + beego.AddNamespace(testNs) | ||
24 | +} |
services/achievement/achievement.go
0 → 100644
1 | +package achievement | ||
2 | + | ||
3 | +import ( | ||
4 | + "encoding/json" | ||
5 | + "fmt" | ||
6 | + "oppmg/common/log" | ||
7 | + "oppmg/models" | ||
8 | + "oppmg/protocol" | ||
9 | + "oppmg/utils" | ||
10 | + "strconv" | ||
11 | + "time" | ||
12 | + | ||
13 | + "github.com/astaxie/beego/orm" | ||
14 | +) | ||
15 | + | ||
16 | +//addAchievementProvider 操作achievement_provider 成果提供人表 | ||
17 | +func addAchievementProvider(addData []protocol.AchievementProvider, achievementId int64, om orm.Ormer) error { | ||
18 | + var ( | ||
19 | + providerList []models.AchievementProvider | ||
20 | + err error | ||
21 | + ) | ||
22 | + nowTime := time.Now() | ||
23 | + for _, v := range addData { | ||
24 | + m := models.AchievementProvider{ | ||
25 | + AchievementId: achievementId, | ||
26 | + UserCompanyId: v.UserCompanyId, | ||
27 | + UserGraspScore: v.UserGraspScore, | ||
28 | + DepartmentId: v.DepartmentId, | ||
29 | + CreateAt: nowTime, | ||
30 | + } | ||
31 | + providerList = append(providerList, m) | ||
32 | + } | ||
33 | + _, err = om.InsertMulti(10, providerList) | ||
34 | + return err | ||
35 | +} | ||
36 | + | ||
37 | +//addAchievementChance 操作 achievement_chance 机会来源表 | ||
38 | +func addAchievementChance(addData []protocol.AchievementChance, achievementId int64, om orm.Ormer) error { | ||
39 | + var ( | ||
40 | + chanceList []models.AchievementChance | ||
41 | + err error | ||
42 | + ) | ||
43 | + nowTime := time.Now() | ||
44 | + for _, v := range addData { | ||
45 | + chanceId, _ := strconv.ParseInt(v.Id, 10, 64) | ||
46 | + m := models.AchievementChance{ | ||
47 | + AchievementId: achievementId, | ||
48 | + ChanceId: chanceId, | ||
49 | + ChanceCode: v.Code, | ||
50 | + CreateAt: nowTime, | ||
51 | + } | ||
52 | + chanceList = append(chanceList, m) | ||
53 | + } | ||
54 | + _, err = om.InsertMulti(10, chanceList) | ||
55 | + return err | ||
56 | +} | ||
57 | + | ||
58 | +//计算剩余的分数 | ||
59 | +func achievementGraspScoreRemain(graspScore, userGraspScore, providerScoreAll float64) float64 { | ||
60 | + return graspScore - userGraspScore - providerScoreAll | ||
61 | +} | ||
62 | + | ||
63 | +//AddAchievement 添加成果 | ||
64 | +func AddAchievement(addData *protocol.RequestAddAchievement, companyid int64) error { | ||
65 | + var ( | ||
66 | + achievementData *models.Achievement | ||
67 | + err error | ||
68 | + ) | ||
69 | + nowTime := time.Now() | ||
70 | + var providerScore float64 | ||
71 | + for _, v := range addData.Provider { | ||
72 | + providerScore += v.UserGraspScore | ||
73 | + } | ||
74 | + scoreRemain := achievementGraspScoreRemain(addData.GraspScore, addData.UserGraspScore, providerScore) | ||
75 | + achievementData = &models.Achievement{ | ||
76 | + CompanyId: companyid, | ||
77 | + DepartmentId: addData.DepartmentId, | ||
78 | + UserCompanyId: addData.UserCompanyId, | ||
79 | + ChanceTypeId: addData.ChanceTypeId, | ||
80 | + AuditTemplateId: addData.AuditTemplateId, | ||
81 | + SourceContent: addData.SourceContent, | ||
82 | + GraspScore: addData.GraspScore, | ||
83 | + UserGraspScore: addData.UserGraspScore, | ||
84 | + CreateAt: nowTime, | ||
85 | + UpdateAt: nowTime, | ||
86 | + Status: models.ACHIEVEMENT_STATUS_YES, | ||
87 | + GraspScoreRemain: scoreRemain, | ||
88 | + } | ||
89 | + if imgData, err := json.Marshal(addData.Images); err == nil { | ||
90 | + achievementData.Images = string(imgData) | ||
91 | + } else { | ||
92 | + achievementData.Images = "[]" | ||
93 | + } | ||
94 | + o := orm.NewOrm() | ||
95 | + o.Begin() | ||
96 | + //操作achievement 成果表 | ||
97 | + achievementId, err := models.AddAchievement(achievementData, o) | ||
98 | + if err != nil { | ||
99 | + log.Error("添加Achievement数据失败:%s", err) | ||
100 | + o.Rollback() | ||
101 | + return protocol.NewErrWithMessage("1") | ||
102 | + } | ||
103 | + //操作 achievement_chance 机会来源表 | ||
104 | + err = addAchievementChance(addData.ChanceData, achievementId, o) | ||
105 | + if err != nil { | ||
106 | + log.Error("添加achievement_chance失败:%s", err) | ||
107 | + o.Rollback() | ||
108 | + return protocol.NewErrWithMessage("1") | ||
109 | + } | ||
110 | + //操作achievement_provider 成果提供人表 | ||
111 | + if len(addData.Provider) > 0 { | ||
112 | + err = addAchievementProvider(addData.Provider, achievementId, o) | ||
113 | + if err != nil { | ||
114 | + log.Error("添加achievement_provider失败:%s", err) | ||
115 | + o.Rollback() | ||
116 | + return protocol.NewErrWithMessage("1") | ||
117 | + } | ||
118 | + } | ||
119 | + //操作achievement_score福利池数据 | ||
120 | + | ||
121 | + err = models.IncreaseAchevementScore(companyid, scoreRemain, o) | ||
122 | + if err != nil { | ||
123 | + o.Rollback() | ||
124 | + log.Error("更新福利池分数achevement_score失败") | ||
125 | + return protocol.NewErrWithMessage("1") | ||
126 | + } | ||
127 | + o.Commit() | ||
128 | + return nil | ||
129 | +} | ||
130 | + | ||
131 | +func EditAchievement(editData *protocol.RequestEditAchievement, companyid int64) error { | ||
132 | + var ( | ||
133 | + achievementData *models.Achievement | ||
134 | + err error | ||
135 | + ) | ||
136 | + achievementData, err = models.GetAchievementById(editData.AchievementId) | ||
137 | + if err != nil { | ||
138 | + log.Error("获取achievement失败:%s", err) | ||
139 | + return protocol.NewErrWithMessage("1") | ||
140 | + } | ||
141 | + var ( | ||
142 | + oldRemain float64 | ||
143 | + newRamain float64 | ||
144 | + providerScore float64 | ||
145 | + ) | ||
146 | + oldRemain = achievementData.GraspScoreRemain | ||
147 | + for _, v := range editData.Provider { | ||
148 | + providerScore += v.UserGraspScore | ||
149 | + } | ||
150 | + newRamain = achievementGraspScoreRemain(editData.GraspScore, editData.UserGraspScore, providerScore) | ||
151 | + nowTime := time.Now() | ||
152 | + achievementData.UpdateAt = nowTime | ||
153 | + achievementData.ChanceTypeId = editData.ChanceTypeId | ||
154 | + achievementData.AuditTemplateId = editData.AuditTemplateId | ||
155 | + achievementData.SourceContent = editData.SourceContent | ||
156 | + achievementData.GraspScore = editData.GraspScore | ||
157 | + achievementData.UserGraspScore = editData.UserGraspScore | ||
158 | + achievementData.GraspScoreRemain = newRamain | ||
159 | + if imgData, err := json.Marshal(editData.Images); err == nil { | ||
160 | + achievementData.Images = string(imgData) | ||
161 | + } else { | ||
162 | + achievementData.Images = "[]" | ||
163 | + } | ||
164 | + cols := []string{ | ||
165 | + "UpdateAt", "ChanceTypeId", "AuditTemplateId", "SourceContent", "GraspScore", | ||
166 | + "UserGraspScore", "GraspScoreRemain", "Images", | ||
167 | + } | ||
168 | + o := orm.NewOrm() | ||
169 | + o.Begin() | ||
170 | + //更新Achievement 数据 | ||
171 | + err = models.UpdateAchievementById(achievementData, cols, o) | ||
172 | + if err != nil { | ||
173 | + o.Rollback() | ||
174 | + log.Info("更新Achievement数据失败:%s", err) | ||
175 | + return protocol.NewErrWithMessage("1") | ||
176 | + } | ||
177 | + //删除achievement_chance旧数据 | ||
178 | + _, err = o.QueryTable(&models.AchievementChance{}). | ||
179 | + Filter("achievement_id", editData.AchievementId). | ||
180 | + Delete() | ||
181 | + if err != nil { | ||
182 | + o.Rollback() | ||
183 | + log.Info("删除achievement_chance数据失败:%s", err) | ||
184 | + return protocol.NewErrWithMessage("1") | ||
185 | + } | ||
186 | + err = addAchievementChance(editData.ChanceData, achievementData.Id, o) | ||
187 | + if err != nil { | ||
188 | + log.Error("添加achievement_chance失败:%s", err) | ||
189 | + o.Rollback() | ||
190 | + return protocol.NewErrWithMessage("1") | ||
191 | + } | ||
192 | + //删除提供者分数 | ||
193 | + _, err = o.QueryTable(&models.AchievementProvider{}). | ||
194 | + Filter("achievement_id", editData.AchievementId). | ||
195 | + Delete() | ||
196 | + if err != nil { | ||
197 | + o.Rollback() | ||
198 | + log.Info("删除achievement_provider数据失败:%s", err) | ||
199 | + return protocol.NewErrWithMessage("1") | ||
200 | + } | ||
201 | + if len(editData.Provider) > 0 { | ||
202 | + err = addAchievementProvider(editData.Provider, achievementData.Id, o) | ||
203 | + if err != nil { | ||
204 | + log.Error("添加achievement_provider失败:%s", err) | ||
205 | + o.Rollback() | ||
206 | + return protocol.NewErrWithMessage("1") | ||
207 | + } | ||
208 | + } | ||
209 | + err = models.IncreaseAchevementScore(companyid, newRamain-oldRemain, o) | ||
210 | + if err != nil { | ||
211 | + o.Rollback() | ||
212 | + log.Error("更新福利池分数achevement_score失败") | ||
213 | + return protocol.NewErrWithMessage("1") | ||
214 | + } | ||
215 | + o.Commit() | ||
216 | + return nil | ||
217 | +} | ||
218 | + | ||
219 | +func GetAchievementList(pageIndex int, pageSize int, companyId int64, status int) protocol.AchievementList { | ||
220 | + dataSql := `SELECT a.id,a.chance_type_id,a.grasp_score,user_company_id | ||
221 | + ,a.create_at,a.status,a.audit_template_id | ||
222 | + FROM achievement AS a WHERE a.company_id=? ` | ||
223 | + countSql := ` SELECT COUNT(*) FROM achievement AS a WHERE a.company_id=? ` | ||
224 | + pageStart := (pageIndex - 1) * pageSize | ||
225 | + cond := []interface{}{companyId} | ||
226 | + if status > 0 { | ||
227 | + dataSql += ` AND a.status=? ` | ||
228 | + countSql += ` AND a.status=? ` | ||
229 | + cond = append(cond, status) | ||
230 | + } else { | ||
231 | + dataSql += ` AND a.status>0 ` | ||
232 | + countSql += ` AND a.status>0 ` | ||
233 | + } | ||
234 | + dataSql = fmt.Sprintf("%s ORDER BY a.create_at DESC LIMIT %d,%d", dataSql, pageStart, pageSize) | ||
235 | + type SqlData struct { | ||
236 | + Id int64 `orm:"column(id)"` | ||
237 | + ChanceTypeId int `orm:"column(chance_type_id)"` | ||
238 | + GraspScore string `orm:"column(grasp_score)"` | ||
239 | + UserCompanyId int64 `orm:"column(user_company_id)"` | ||
240 | + CreateAt string `orm:"column(create_at)"` | ||
241 | + Status int `orm:"column(status)"` | ||
242 | + AuditTemplateId int64 `orm:"column(audit_template_id)"` | ||
243 | + } | ||
244 | + var ( | ||
245 | + sqldata []SqlData | ||
246 | + cnt int | ||
247 | + err error | ||
248 | + ) | ||
249 | + rspData := protocol.AchievementList{ | ||
250 | + ResponsePageInfo: protocol.ResponsePageInfo{ | ||
251 | + TotalPage: 0, CurrentPage: pageIndex, | ||
252 | + }, | ||
253 | + List: make([]protocol.AchievementListItem, 0), | ||
254 | + } | ||
255 | + err = utils.ExecuteQueryOne(&cnt, countSql, cond...) | ||
256 | + if err != nil { | ||
257 | + log.Error("SQL EXECUTE ERR:%s", err) | ||
258 | + return rspData | ||
259 | + } | ||
260 | + rspData.TotalPage = cnt | ||
261 | + if cnt == 0 { | ||
262 | + return rspData | ||
263 | + } | ||
264 | + err = utils.ExecuteQueryAll(&sqldata, dataSql, cond...) | ||
265 | + if err != nil { | ||
266 | + log.Error("SQL EXECUTE ERR:%s", err) | ||
267 | + return rspData | ||
268 | + } | ||
269 | + for i := range sqldata { | ||
270 | + m := protocol.AchievementListItem{ | ||
271 | + Id: sqldata[i].Id, | ||
272 | + CreateTime: sqldata[i].CreateAt, | ||
273 | + GraspScore: sqldata[i].GraspScore, | ||
274 | + Status: sqldata[i].Status, | ||
275 | + } | ||
276 | + var ( | ||
277 | + chanceTypeA *models.ChanceType //一级分类 | ||
278 | + chanceTypeB *models.AuditTemplate //二级分类 | ||
279 | + usercompany *models.UserCompany | ||
280 | + err error | ||
281 | + ) | ||
282 | + chanceTypeA, err = models.GetChanceTypeById(sqldata[i].ChanceTypeId) | ||
283 | + if err == nil { | ||
284 | + m.TypeA = chanceTypeA.Name | ||
285 | + } else { | ||
286 | + log.Error(err.Error()) | ||
287 | + } | ||
288 | + chanceTypeB, err = models.GetAuditTemplateById(sqldata[i].AuditTemplateId) | ||
289 | + if err == nil { | ||
290 | + m.TypeB = chanceTypeB.Name | ||
291 | + } else { | ||
292 | + log.Error(err.Error()) | ||
293 | + } | ||
294 | + usercompany, err = models.GetUserCompanyById(sqldata[i].UserCompanyId) | ||
295 | + if err == nil { | ||
296 | + usr, err := models.GetUserById(usercompany.UserId) | ||
297 | + if err == nil { | ||
298 | + m.UserGrasp = usr.NickName | ||
299 | + } else { | ||
300 | + log.Error(err.Error()) | ||
301 | + } | ||
302 | + } else { | ||
303 | + log.Error(err.Error()) | ||
304 | + } | ||
305 | + rspData.List = append(rspData.List, m) | ||
306 | + } | ||
307 | + | ||
308 | + return rspData | ||
309 | +} | ||
310 | + | ||
311 | +func GetAchievementInfo(id int64, companyId int64) *protocol.ResponseAchievementInfo { | ||
312 | + rspData := &protocol.ResponseAchievementInfo{ | ||
313 | + Images: make([]protocol.AchievementImage, 0), | ||
314 | + Provider: make([]protocol.AchievementProvider, 0), | ||
315 | + ChanceData: make([]protocol.AchievementChance, 0), | ||
316 | + } | ||
317 | + var ( | ||
318 | + achievementData *models.Achievement | ||
319 | + chanceData []models.AchievementChance | ||
320 | + err error | ||
321 | + ) | ||
322 | + achievementData, err = models.GetAchievementById(id) | ||
323 | + if err == nil { | ||
324 | + rspData.AchievementId = achievementData.Id | ||
325 | + rspData.AuditTemplateId = achievementData.AuditTemplateId | ||
326 | + rspData.ChanceTypeId = achievementData.ChanceTypeId | ||
327 | + rspData.DepartmentId = achievementData.DepartmentId | ||
328 | + rspData.SourceContent = achievementData.SourceContent | ||
329 | + img := make([]protocol.AchievementImage, 0) | ||
330 | + json.Unmarshal([]byte(achievementData.Images), &img) | ||
331 | + rspData.Images = img | ||
332 | + rspData.GraspScore = achievementData.GraspScore | ||
333 | + rspData.UserGraspScore = achievementData.UserGraspScore | ||
334 | + rspData.UserCompanyId = achievementData.UserCompanyId | ||
335 | + rspData.CrreateAt = achievementData.CreateAt.Format("2006-01-02 15:04:05") | ||
336 | + ud, err := models.GetUserDepartment(rspData.DepartmentId, rspData.UserCompanyId) | ||
337 | + if err == nil { | ||
338 | + rspData.UserDepartmentId = ud.Id | ||
339 | + } | ||
340 | + } else { | ||
341 | + log.Error("获取achievement数据失败:%s", err) | ||
342 | + } | ||
343 | + chanceData, err = models.GetAchievementChanceByAchieve(id) | ||
344 | + if err == nil { | ||
345 | + for _, v := range chanceData { | ||
346 | + m := protocol.AchievementChance{ | ||
347 | + Id: fmt.Sprint(v.ChanceId), | ||
348 | + Code: v.ChanceCode, | ||
349 | + } | ||
350 | + rspData.ChanceData = append(rspData.ChanceData, m) | ||
351 | + } | ||
352 | + } else { | ||
353 | + log.Error("获取achievement_chance数据失败:%s", err) | ||
354 | + } | ||
355 | + rspData.Provider = getAchievementProvider(rspData.AchievementId) | ||
356 | + var ( | ||
357 | + usercompanyData *models.UserCompany | ||
358 | + departmentData *models.Department | ||
359 | + chaneTypeData *models.ChanceType | ||
360 | + auditTempData *models.AuditTemplate | ||
361 | + ) | ||
362 | + | ||
363 | + departmentData, err = models.GetDepartmentById(rspData.DepartmentId) | ||
364 | + if err == nil { | ||
365 | + rspData.DepartmentId = departmentData.Id | ||
366 | + rspData.DeparmentName = departmentData.Name | ||
367 | + } | ||
368 | + usercompanyData, err = models.GetUserCompanyById(rspData.UserCompanyId) | ||
369 | + if err == nil { | ||
370 | + rspData.UserCompanyId = usercompanyData.Id | ||
371 | + rspData.NickName = usercompanyData.NickName | ||
372 | + } | ||
373 | + chaneTypeData, err = models.GetChanceTypeById(int(rspData.ChanceTypeId)) | ||
374 | + if err == nil { | ||
375 | + rspData.ChanceTypeId = int64(chaneTypeData.Id) | ||
376 | + rspData.ChanceTypeName = chaneTypeData.Name | ||
377 | + } | ||
378 | + auditTempData, err = models.GetAuditTemplateById(rspData.AuditTemplateId) | ||
379 | + if err == nil { | ||
380 | + rspData.AuditTemplateId = auditTempData.Id | ||
381 | + rspData.AuditTemplateName = auditTempData.Name | ||
382 | + } | ||
383 | + return rspData | ||
384 | +} | ||
385 | + | ||
386 | +func getAchievementProvider(achievementId int64) []protocol.AchievementProvider { | ||
387 | + sql := `SELECT a.achievement_id,a.department_id,a.user_company_id,a.user_grasp_score | ||
388 | + ,b.nick_name,c.name As department_name | ||
389 | + FROM achievement_provider AS a | ||
390 | + LEFT JOIN user_company AS b on a.user_company_id = b.id | ||
391 | + LEFT JOIN department AS c ON a.department_id = c.id | ||
392 | + WHERE achievement_id=? ` | ||
393 | + var ( | ||
394 | + err error | ||
395 | + sqldata = make([]protocol.AchievementProvider, 0) | ||
396 | + ) | ||
397 | + err = utils.ExecuteQueryAll(&sqldata, sql, achievementId) | ||
398 | + if err != nil { | ||
399 | + log.Error("SQL EXECUTE ERR:%s", err) | ||
400 | + } | ||
401 | + for i := range sqldata { | ||
402 | + userDepartment, err := models.GetUserDepartment(sqldata[i].DepartmentId, sqldata[i].UserCompanyId) | ||
403 | + if err == nil { | ||
404 | + sqldata[i].UserDepartmentId = userDepartment.Id | ||
405 | + } | ||
406 | + } | ||
407 | + return sqldata | ||
408 | +} |
@@ -98,33 +98,7 @@ func buildSqlForAuditList(usercompanyid int64, companyid int64, userid int64) st | @@ -98,33 +98,7 @@ func buildSqlForAuditList(usercompanyid int64, companyid int64, userid int64) st | ||
98 | unionsql = sql1 + " UNION " + sql2 | 98 | unionsql = sql1 + " UNION " + sql2 |
99 | return fmt.Sprintf(allsql, unionsql) | 99 | return fmt.Sprintf(allsql, unionsql) |
100 | } | 100 | } |
101 | - // //获取权限 | ||
102 | - // if ok := redisdata.ExistUserPermission(userid); !ok { | ||
103 | - // //尝试重数据库获取 | ||
104 | - // log.Debug("从数据库读取权限") | ||
105 | - // permissionMap, err := serverabc.GetUserPermission(usercompanyid, serverabc.M_SYSTEM_OPPORTUNITY) | ||
106 | - // if err != nil { | ||
107 | - // log.Debug("从数据库未获得对应权限 :%s", err) | ||
108 | - // unionsql = sql1 + " UNION " + sql2 | ||
109 | - // return fmt.Sprintf(allsql, unionsql) | ||
110 | - // } | ||
111 | - // if v, ok := permissionMap[serverabc.M_SYSTEM_OPPORTUNITY]; !ok { | ||
112 | - // unionsql = sql1 + " UNION " + sql2 | ||
113 | - // return fmt.Sprintf(allsql, unionsql) | ||
114 | - // } else { | ||
115 | - // permissionObject = v | ||
116 | - // } | ||
117 | - // } else { | ||
118 | - // //使用缓存 | ||
119 | - // log.Debug("从缓存读取权限") | ||
120 | - // permissionObject, err = redisdata.GetUserPermission(userid, serverabc.M_SYSTEM_OPPORTUNITY) | ||
121 | - // if err != nil { | ||
122 | - // log.Debug("从缓存未获得对应权限 :%s", err) | ||
123 | - // unionsql = sql1 + " UNION " + sql2 | ||
124 | - // return fmt.Sprintf(allsql, unionsql) | ||
125 | - // } | ||
126 | - // } | ||
127 | - // ------------------------- | 101 | + |
128 | var ( | 102 | var ( |
129 | usrPermission *serverabc.OptionOpportunity | 103 | usrPermission *serverabc.OptionOpportunity |
130 | ok bool | 104 | ok bool |
@@ -451,12 +425,17 @@ func getAuditFlowLog(chanceid int64) ([]protocol.ChanceFlowLog, error) { | @@ -451,12 +425,17 @@ func getAuditFlowLog(chanceid int64) ([]protocol.ChanceFlowLog, error) { | ||
451 | flowLogs = make([]protocol.ChanceFlowLog, 0) | 425 | flowLogs = make([]protocol.ChanceFlowLog, 0) |
452 | err error | 426 | err error |
453 | ) | 427 | ) |
454 | - const datasql string = `SELECT a.chance_id,a.content,a.create_at,c.nick_name | 428 | + const datasql string = `SELECT a.id, a.chance_id,a.content,a.create_at,c.nick_name,a.code |
455 | FROM audit_flow_log AS a | 429 | FROM audit_flow_log AS a |
456 | LEFT JOIN user_company AS b ON a.approve_user_id=b.id | 430 | LEFT JOIN user_company AS b ON a.approve_user_id=b.id |
457 | LEFT JOIN user AS c ON b.user_id = c.id | 431 | LEFT JOIN user AS c ON b.user_id = c.id |
458 | WHERE chance_id =? ` | 432 | WHERE chance_id =? ` |
459 | err = utils.ExecuteQueryAll(&flowLogs, datasql, chanceid) | 433 | err = utils.ExecuteQueryAll(&flowLogs, datasql, chanceid) |
434 | + for i := range flowLogs { | ||
435 | + if flowLogs[i].Code == 6 { //系统自动审核通过 | ||
436 | + flowLogs[i].NickName = "系统" | ||
437 | + } | ||
438 | + } | ||
460 | return flowLogs, err | 439 | return flowLogs, err |
461 | } | 440 | } |
462 | 441 | ||
@@ -551,3 +530,50 @@ func GetPermissionInAuditPage(userid int64, companyid int64) serverabc.OptionOpp | @@ -551,3 +530,50 @@ func GetPermissionInAuditPage(userid int64, companyid int64) serverabc.OptionOpp | ||
551 | } | 530 | } |
552 | return option | 531 | return option |
553 | } | 532 | } |
533 | + | ||
534 | +type ChanceReviseLogInfo struct { | ||
535 | + UserName string `json:"user_name"` | ||
536 | + UserComapnyId int64 `json:"user_company_id"` | ||
537 | + CreateTime string `json:"create_time"` | ||
538 | + models.ChanceReviseLogData | ||
539 | +} | ||
540 | + | ||
541 | +//GetChanceReviseLog 获取对机会的操作记录,补充机会的详情 | ||
542 | +func GetChanceReviseLog(flowLogId int64, chanceId int64, companyId int64) (*ChanceReviseLogInfo, error) { | ||
543 | + var ( | ||
544 | + reviseLog *models.ChanceReviseLog | ||
545 | + reviseLogData *models.ChanceReviseLogData | ||
546 | + usercompanyData *models.UserCompany | ||
547 | + chanceData *models.Chance | ||
548 | + err error | ||
549 | + ) | ||
550 | + chanceData, err = models.GetChanceById(chanceId) | ||
551 | + if err != nil { | ||
552 | + log.Error("获取机会数据chance失败:%s", err) | ||
553 | + return nil, protocol.NewErrWithMessage("1") | ||
554 | + } | ||
555 | + if chanceData.CompanyId != companyId { | ||
556 | + log.Error("机会的公司不匹配") | ||
557 | + } | ||
558 | + reviseLog, reviseLogData, err = models.GetChanceReviseLogData(flowLogId) | ||
559 | + if err != nil { | ||
560 | + log.Error("获取chance_revise_log失败,err:%s", err) | ||
561 | + return nil, protocol.NewErrWithMessage("1") | ||
562 | + } | ||
563 | + if reviseLog.ChanceId != chanceId { | ||
564 | + log.Error("日志与机会不匹配") | ||
565 | + return nil, protocol.NewErrWithMessage("1") | ||
566 | + } | ||
567 | + rspData := &ChanceReviseLogInfo{ | ||
568 | + UserComapnyId: reviseLog.UserCompanyId, | ||
569 | + CreateTime: reviseLog.CreateAt.Format("2006-01-02 15:04:05"), | ||
570 | + ChanceReviseLogData: *reviseLogData, | ||
571 | + } | ||
572 | + usercompanyData, err = models.GetUserCompanyById(reviseLog.UserCompanyId) | ||
573 | + if err != nil { | ||
574 | + log.Error("获取用户数据user_company失败;%s", err) | ||
575 | + } else { | ||
576 | + rspData.UserName = usercompanyData.NickName | ||
577 | + } | ||
578 | + return rspData, nil | ||
579 | +} |
@@ -505,6 +505,7 @@ func TemplateDelete(uid, companyId int64, request *protocol.TemplateDeleteReques | @@ -505,6 +505,7 @@ func TemplateDelete(uid, companyId int64, request *protocol.TemplateDeleteReques | ||
505 | template *models.AuditTemplate | 505 | template *models.AuditTemplate |
506 | num int | 506 | num int |
507 | sql1 string = `select count(0) from chance where audit_template_id = ? limit 1` | 507 | sql1 string = `select count(0) from chance where audit_template_id = ? limit 1` |
508 | + sql2 string = `select count(0) from achievement where audit_template_id = ? and status in (1,2)` | ||
508 | ) | 509 | ) |
509 | if template, err = models.GetAuditTemplateById(int64(request.TemplateId)); err != nil { | 510 | if template, err = models.GetAuditTemplateById(int64(request.TemplateId)); err != nil { |
510 | log.Error(err.Error()) | 511 | log.Error(err.Error()) |
@@ -519,6 +520,11 @@ func TemplateDelete(uid, companyId int64, request *protocol.TemplateDeleteReques | @@ -519,6 +520,11 @@ func TemplateDelete(uid, companyId int64, request *protocol.TemplateDeleteReques | ||
519 | err = protocol.NewErrWithMessage("10062") | 520 | err = protocol.NewErrWithMessage("10062") |
520 | return | 521 | return |
521 | } | 522 | } |
523 | + //3.判断是否有对应发布的成果 | ||
524 | + if err = utils.ExecuteQueryOne(&num, sql2, request.TemplateId); err == nil && num > 0 { | ||
525 | + err = protocol.NewErrWithMessage("10062") | ||
526 | + return | ||
527 | + } | ||
522 | 528 | ||
523 | //删除数据 | 529 | //删除数据 |
524 | if err = models.DeleteAuditTemplate(int64(request.TemplateId)); err != nil { | 530 | if err = models.DeleteAuditTemplate(int64(request.TemplateId)); err != nil { |
@@ -643,6 +649,7 @@ func TemplateDeleteCategory(uid, companyId int64, request *protocol.TemplateDele | @@ -643,6 +649,7 @@ func TemplateDeleteCategory(uid, companyId int64, request *protocol.TemplateDele | ||
643 | num int | 649 | num int |
644 | sql1 string = `select count(0) from audit_template where chance_type_id =? limit 1` | 650 | sql1 string = `select count(0) from audit_template where chance_type_id =? limit 1` |
645 | sql2 string = `select count(0) from chance where chance_type_id = ? limit 1` | 651 | sql2 string = `select count(0) from chance where chance_type_id = ? limit 1` |
652 | + sql3 string = `select count(0) from achievement where chance_type_id = ? and status in (1,2)` | ||
646 | ) | 653 | ) |
647 | rsp = &protocol.TemplateDeleteCategoryResponse{} | 654 | rsp = &protocol.TemplateDeleteCategoryResponse{} |
648 | if chanceType, err = models.GetChanceTypeById(request.ChanceTypeId); err != nil { | 655 | if chanceType, err = models.GetChanceTypeById(request.ChanceTypeId); err != nil { |
@@ -667,6 +674,11 @@ func TemplateDeleteCategory(uid, companyId int64, request *protocol.TemplateDele | @@ -667,6 +674,11 @@ func TemplateDeleteCategory(uid, companyId int64, request *protocol.TemplateDele | ||
667 | err = protocol.NewErrWithMessage("10062") | 674 | err = protocol.NewErrWithMessage("10062") |
668 | return | 675 | return |
669 | } | 676 | } |
677 | + //3.判断是否有对应发布的成果 | ||
678 | + if err = utils.ExecuteQueryOne(&num, sql3, request.ChanceTypeId); err == nil && num > 0 { | ||
679 | + err = protocol.NewErrWithMessage("10062") | ||
680 | + return | ||
681 | + } | ||
670 | 682 | ||
671 | //删除数据 | 683 | //删除数据 |
672 | if err = models.DeleteChanceType(request.ChanceTypeId); err != nil { | 684 | if err = models.DeleteChanceType(request.ChanceTypeId); err != nil { |
@@ -571,3 +571,63 @@ func ValidUserPermission(urlPath string, userid int64, companyid int64) bool { | @@ -571,3 +571,63 @@ func ValidUserPermission(urlPath string, userid int64, companyid int64) bool { | ||
571 | } | 571 | } |
572 | return false | 572 | return false |
573 | } | 573 | } |
574 | + | ||
575 | +//LoginAuthBySecretKey 使用秘钥进行登录 | ||
576 | +func LoginAuthBySecretKey(secretKey string) (protocol.LoginAuthToken, error) { | ||
577 | + var ( | ||
578 | + err error | ||
579 | + logintoken protocol.LoginAuthToken | ||
580 | + usercompanyid int64 | ||
581 | + userdata *models.User | ||
582 | + companyData *models.Company | ||
583 | + ) | ||
584 | + var uclientReturn *ucenter.ResponseLogin | ||
585 | + uclientReturn, err = ucenter.RequestUCenterLoginBySecret(secretKey) | ||
586 | + if err != nil { | ||
587 | + return logintoken, protocol.ErrWithMessage{ | ||
588 | + ErrorCode: protocol.ErrorCode{ | ||
589 | + Errno: "-1", | ||
590 | + Errmsg: uclientReturn.Msg, | ||
591 | + }, | ||
592 | + } | ||
593 | + } | ||
594 | + userdata, err = models.GetUserByPhone(uclientReturn.Data.Phone) | ||
595 | + if err != nil { | ||
596 | + log.Debug("GetUserByPhone(%d) err:%s", uclientReturn.Data.Phone, err) | ||
597 | + return logintoken, protocol.NewErrWithMessage("10021") | ||
598 | + } | ||
599 | + companyData, err = models.GetCompanyByUCenter(uclientReturn.Data.CompanyId) | ||
600 | + if err != nil { | ||
601 | + log.Error("获取company数据失败:%s", err) | ||
602 | + return logintoken, protocol.NewErrWithMessage("10111") | ||
603 | + } | ||
604 | + if companyData.Enable == models.COMPANY_ENABLE_NO { | ||
605 | + log.Error("公司未启用机会模块") | ||
606 | + return logintoken, protocol.NewErrWithMessage("10124") | ||
607 | + } | ||
608 | + ucompany, err := models.GetUserCompanyBy(userdata.Id, companyData.Id) | ||
609 | + if err != nil { | ||
610 | + log.Error("获取user_company失败;%s", err) | ||
611 | + return logintoken, protocol.NewErrWithMessage("10022") | ||
612 | + } | ||
613 | + | ||
614 | + logintoken, _ = GenerateAuthToken(userdata.Id, companyData.Id, ucompany.Id) | ||
615 | + //更新用户数据 | ||
616 | + userdata.Accid = uclientReturn.Data.Accid | ||
617 | + userdata.Icon = uclientReturn.Data.Avatar | ||
618 | + userdata.ImToken = uclientReturn.Data.Imtoken | ||
619 | + userdata.NickName = uclientReturn.Data.NickName | ||
620 | + userdata.CsAccount = uclientReturn.Data.CustomerAccount | ||
621 | + userdata.LastLoginTime = time.Now() | ||
622 | + err = models.UpdateUserById(userdata, []string{"Accid", "Icon", "ImToken", "NickName", "CsAccount", "LastLoginTime"}) | ||
623 | + if err != nil { | ||
624 | + log.Error("更新用户user数据失败:%s", err) | ||
625 | + } | ||
626 | + ucompany.NickName = uclientReturn.Data.NickName | ||
627 | + err = models.UpdateUserCompanyById(ucompany, []string{"NickName"}) | ||
628 | + if err != nil { | ||
629 | + log.Error("更新用户user_company数据失败:%s", err) | ||
630 | + } | ||
631 | + InitPermission(usercompanyid, userdata.Id) | ||
632 | + return logintoken, err | ||
633 | +} |
@@ -182,3 +182,136 @@ func SeleteGetChanceTypeList(companyid int64) []protocol.ChanceTypeBase { | @@ -182,3 +182,136 @@ func SeleteGetChanceTypeList(companyid int64) []protocol.ChanceTypeBase { | ||
182 | } | 182 | } |
183 | return data | 183 | return data |
184 | } | 184 | } |
185 | + | ||
186 | +func SelectCompanyUserList(pageIndex int, pageSize int, companyid int64, userName string) protocol.SelectCompanyUserList { | ||
187 | + datasql := `SELECT b.id,a.id as user_company_id,d.nick_name,c.name AS department_name,c.id AS department_id | ||
188 | + FROM user_company AS a | ||
189 | + LEFT JOIN user_department AS b ON a.id = b.user_company_id AND b.enable_status=1 | ||
190 | + LEFT JOIN department AS c ON b.department_id = c.id | ||
191 | + LEFT JOIN user AS d ON a.user_id = d.id | ||
192 | + WHERE a.delete_at = 0 AND a.enable=1 AND a.company_id = ? ` | ||
193 | + countsql := `SELECT count(*) | ||
194 | + FROM user_company AS a | ||
195 | + LEFT JOIN user_department AS b ON a.id = b.user_company_id AND b.enable_status=1 | ||
196 | + LEFT JOIN department AS c ON b.department_id = c.id | ||
197 | + LEFT JOIN user AS d ON a.user_id = d.id | ||
198 | + WHERE a.delete_at = 0 AND a.enable=1 AND a.company_id =? ` | ||
199 | + cond := []interface{}{companyid} | ||
200 | + where := "" | ||
201 | + if len(userName) > 0 { | ||
202 | + where += ` And d.nick_name like ? ` | ||
203 | + cond = append(cond, "%"+userName+"%") | ||
204 | + } | ||
205 | + datasql += where | ||
206 | + countsql += where | ||
207 | + pageStart := (pageIndex - 1) * pageSize | ||
208 | + datasql += fmt.Sprintf(` limit %d,%d `, pageStart, pageSize) | ||
209 | + var ( | ||
210 | + err error | ||
211 | + cnt int | ||
212 | + sqlData = make([]protocol.SelectCompanyUserListItem, 0) | ||
213 | + ) | ||
214 | + rspData := protocol.SelectCompanyUserList{ | ||
215 | + ResponsePageInfo: protocol.ResponsePageInfo{ | ||
216 | + TotalPage: 0, CurrentPage: pageIndex, | ||
217 | + }, | ||
218 | + List: make([]protocol.SelectCompanyUserListItem, 0), | ||
219 | + } | ||
220 | + err = utils.ExecuteQueryOne(&cnt, countsql, cond...) | ||
221 | + if err != nil { | ||
222 | + log.Error("SQL EXECUTE ERR:%s", err) | ||
223 | + return rspData | ||
224 | + } | ||
225 | + if cnt == 0 { | ||
226 | + return rspData | ||
227 | + } | ||
228 | + err = utils.ExecuteQueryAll(&sqlData, datasql, cond...) | ||
229 | + if err != nil { | ||
230 | + log.Error("SQL EXECUTE ERR:%s", err) | ||
231 | + return rspData | ||
232 | + } | ||
233 | + rspData.List = sqlData | ||
234 | + rspData.TotalPage = cnt | ||
235 | + return rspData | ||
236 | +} | ||
237 | + | ||
238 | +func SelectChanceList(pageIndex int, pageSize int, companyid int64, searchType int, chanceCode string) protocol.SelectChanceList { | ||
239 | + datasql := ` SELECT a.id ,a.department_id,a.chance_type_id,a.audit_template_id | ||
240 | + ,a.user_id,a.create_at,a.code,c.nick_name | ||
241 | + FROM chance as a | ||
242 | + LEFT JOIN user_company AS b ON a.user_id = b.id | ||
243 | + JOIN user AS c ON b.user_id = c.id | ||
244 | + WHERE a.company_id =? AND a.status=1 AND a.enable_status=1 AND a.review_status=3 ` | ||
245 | + countsql := `SELECT count(*) | ||
246 | + FROM chance as a | ||
247 | + LEFT JOIN user_company AS b ON a.user_id = b.id | ||
248 | + JOIN user AS c ON b.user_id = c.id | ||
249 | + WHERE a.company_id =? AND a.status=1 AND a.enable_status=1 AND a.review_status=3 ` | ||
250 | + cond := []interface{}{companyid} | ||
251 | + where := "" | ||
252 | + if len(chanceCode) > 0 { | ||
253 | + switch searchType { | ||
254 | + case 1: | ||
255 | + //根据机会编码 | ||
256 | + where += ` And a.code like ? ` | ||
257 | + cond = append(cond, "%"+chanceCode+"%") | ||
258 | + case 2: | ||
259 | + //根据提交人 | ||
260 | + where += ` And c.nick_name like ? ` | ||
261 | + cond = append(cond, "%"+chanceCode+"%") | ||
262 | + } | ||
263 | + } | ||
264 | + datasql += where | ||
265 | + countsql += where | ||
266 | + pageStart := (pageIndex - 1) * pageSize | ||
267 | + datasql += fmt.Sprintf(` ORDER BY create_at DESC limit %d,%d `, pageStart, pageSize) | ||
268 | + var ( | ||
269 | + err error | ||
270 | + cnt int | ||
271 | + sqldata []protocol.SelectChanceListItem | ||
272 | + ) | ||
273 | + rspData := protocol.SelectChanceList{ | ||
274 | + ResponsePageInfo: protocol.ResponsePageInfo{ | ||
275 | + TotalPage: 0, CurrentPage: pageIndex, | ||
276 | + }, | ||
277 | + List: make([]protocol.SelectChanceListItem, 0), | ||
278 | + } | ||
279 | + err = utils.ExecuteQueryOne(&cnt, countsql, cond...) | ||
280 | + if err != nil { | ||
281 | + log.Error("SQL EXECUTE ERR:%s", err) | ||
282 | + return rspData | ||
283 | + } | ||
284 | + if cnt == 0 { | ||
285 | + return rspData | ||
286 | + } | ||
287 | + err = utils.ExecuteQueryAll(&sqldata, datasql, cond...) | ||
288 | + if err != nil { | ||
289 | + log.Error("SQL EXECUTE ERR:%s", err) | ||
290 | + return rspData | ||
291 | + } | ||
292 | + | ||
293 | + for i, v := range sqldata { | ||
294 | + d, err := models.GetDepartmentById(v.DepartmentId) | ||
295 | + if err == nil { | ||
296 | + sqldata[i].DepartmentName = d.Name | ||
297 | + } | ||
298 | + ct, err := models.GetChanceTypeById(v.ChanceTypeId) | ||
299 | + if err == nil { | ||
300 | + sqldata[i].ChanceTypeName = ct.Name | ||
301 | + } | ||
302 | + at, err := models.GetAuditTemplateById(v.AuditTemplateId) | ||
303 | + if err == nil { | ||
304 | + sqldata[i].AuditTemplateName = at.Name | ||
305 | + } | ||
306 | + uc, err := models.GetUserCompanyById(v.UserId) | ||
307 | + if err == nil { | ||
308 | + u, err := models.GetUserById(uc.UserId) | ||
309 | + if err == nil { | ||
310 | + sqldata[i].UserName = u.NickName | ||
311 | + } | ||
312 | + } | ||
313 | + } | ||
314 | + rspData.List = sqldata | ||
315 | + rspData.TotalPage = cnt | ||
316 | + return rspData | ||
317 | +} |
@@ -116,6 +116,7 @@ func initCompany(centerCompany protocol.CenterCompanyInfo, admininfo *models.Use | @@ -116,6 +116,7 @@ func initCompany(centerCompany protocol.CenterCompanyInfo, admininfo *models.Use | ||
116 | } | 116 | } |
117 | } else if err == orm.ErrNoRows { | 117 | } else if err == orm.ErrNoRows { |
118 | newCompany = &models.Company{ | 118 | newCompany = &models.Company{ |
119 | + Id: centerCompany.CompanyId, | ||
119 | Name: centerCompany.CompanyName, | 120 | Name: centerCompany.CompanyName, |
120 | AdminId: admininfo.Id, | 121 | AdminId: admininfo.Id, |
121 | UserCenterId: centerCompany.CompanyId, | 122 | UserCenterId: centerCompany.CompanyId, |
@@ -209,8 +210,11 @@ func initUserCompany(newcompany *models.Company, newuser *models.User, o orm.Orm | @@ -209,8 +210,11 @@ func initUserCompany(newcompany *models.Company, newuser *models.User, o orm.Orm | ||
209 | } | 210 | } |
210 | } else if err == orm.ErrNoRows { | 211 | } else if err == orm.ErrNoRows { |
211 | uc = &models.UserCompany{ | 212 | uc = &models.UserCompany{ |
212 | - UserId: newuser.Id, | ||
213 | - CompanyId: newcompany.Id, | 213 | + UserId: newuser.Id, |
214 | + CompanyId: newcompany.Id, | ||
215 | + OpenId: newuser.UserCenterId, | ||
216 | + Enable: models.USERCOMPANY_ENABLE_YES, | ||
217 | + ChargeStatus: models.USERCOMPANY_CHARGE_YES, | ||
214 | } | 218 | } |
215 | _, err = models.AddUserCompany(uc, o) | 219 | _, err = models.AddUserCompany(uc, o) |
216 | if err != nil { | 220 | if err != nil { |
@@ -388,8 +388,8 @@ func GetDepartmentUser(companyid int64, departmentid int64) ([]protocol.DepartUs | @@ -388,8 +388,8 @@ func GetDepartmentUser(companyid int64, departmentid int64) ([]protocol.DepartUs | ||
388 | } | 388 | } |
389 | const dataSql string = `SELECT a.user_company_id,b.user_id | 389 | const dataSql string = `SELECT a.user_company_id,b.user_id |
390 | FROM user_department AS a | 390 | FROM user_department AS a |
391 | - LEFT JOIN user_company AS b ON a.user_company_id = b.id | ||
392 | - WHERE a.department_id=? AND b.delete_at=0 AND a.enable_status = 1 ` | 391 | + JOIN user_company AS b ON a.user_company_id = b.id |
392 | + WHERE a.department_id=? AND b.delete_at=0 AND a.enable_status = 1 AND b.enable = 1 ` | ||
393 | 393 | ||
394 | err = utils.ExecuteQueryAll(&returnData, dataSql, department.Id) | 394 | err = utils.ExecuteQueryAll(&returnData, dataSql, department.Id) |
395 | if err != nil { | 395 | if err != nil { |
services/crontab/crontab.go
0 → 100644
1 | +package crontab | ||
2 | + | ||
3 | +import ( | ||
4 | + "github.com/astaxie/beego/toolbox" | ||
5 | +) | ||
6 | + | ||
7 | +//定时任务 | ||
8 | + | ||
9 | +func Run() { | ||
10 | + //自动创建赛季 每隔一小时执行一次 | ||
11 | + taskRankPeriod := toolbox.NewTask("AutoCreateRankPeriod", " 0 1 * * * *", AutoCreateRankPeriod) | ||
12 | + toolbox.AddTask("AutoCreateRankPeriod", taskRankPeriod) | ||
13 | + toolbox.StartTask() | ||
14 | +} |
services/crontab/rank.go
0 → 100644
1 | +package crontab | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "oppmg/common/log" | ||
6 | + "oppmg/models" | ||
7 | + "oppmg/utils" | ||
8 | + "strings" | ||
9 | + "time" | ||
10 | + | ||
11 | + "github.com/astaxie/beego/orm" | ||
12 | +) | ||
13 | + | ||
14 | +//rankTypeAutoPeriod 榜单配置:自动创建赛季 | ||
15 | +type RankTypeAutoPeriod struct { | ||
16 | + RankTypeId int64 `orm:"column(rank_type_id)"` | ||
17 | + CompanyId int64 `orm:"column(company_id)"` | ||
18 | + AutoPeriod int64 `orm:"column(auto_period)"` | ||
19 | + CreateTime int64 `orm:"column(create_time)"` | ||
20 | + RankType int8 `orm:"column(rank_type)` | ||
21 | +} | ||
22 | + | ||
23 | +// | ||
24 | +type RankPeriodEndTime struct { | ||
25 | + RankTypeId int64 `orm:"column(rank_type_id)"` | ||
26 | + EndTime time.Time `orm:"column(end_time)"` | ||
27 | +} | ||
28 | + | ||
29 | +func AutoCreateRankPeriod() error { | ||
30 | + log.Info("计划任务:【自动创建赛季】") | ||
31 | + //获取需要执行自动创建的榜单记录 | ||
32 | + sql1 := `SELECT a.id AS rank_type_id,a.type AS rank_type,a.auto_period,UNIX_TIMESTAMP(a.create_at) AS create_time | ||
33 | + ,a.company_id | ||
34 | + FROM rank_type AS a | ||
35 | + JOIN company AS b ON a.company_id=b.id AND b.enable=1 AND b.delete_at=0 | ||
36 | + WHERE a.auto_create = 1 AND a.auto_period>0 | ||
37 | + AND NOT EXISTS( | ||
38 | + SELECT 1 FROM rank_period AS c WHERE a.id=c.rank_type_id AND c.status<2 | ||
39 | + ) | ||
40 | + AND UNIX_TIMESTAMP(a.create_at)>? | ||
41 | + LIMIT 1000` | ||
42 | + | ||
43 | + //获取自动创建赛季时需要的开始时间 | ||
44 | + sql2 := `SELECT a.rank_type_id,MAX(a.end_time) AS end_time | ||
45 | + FROM rank_period AS a | ||
46 | + WHERE a.status = 2 AND a.rank_type_id IN (%s) | ||
47 | + GROUP BY a.rank_type_id ` | ||
48 | + var ( | ||
49 | + rankTypeCreateAt int64 | ||
50 | + err error | ||
51 | + ) | ||
52 | + o := orm.NewOrm() | ||
53 | +LOOP0: | ||
54 | + for { | ||
55 | + var ( | ||
56 | + rankTypeList []RankTypeAutoPeriod | ||
57 | + ) | ||
58 | + log.Info("【自动创建赛季】,获取需要执行自动创建的榜单记录") | ||
59 | + err = utils.ExecuteQueryAll(&rankTypeList, sql1, rankTypeCreateAt) | ||
60 | + if err != nil { | ||
61 | + log.Error("【自动创建赛季】,获取需要执行自动创建的榜单记录失败,err:%s", err) | ||
62 | + break LOOP0 | ||
63 | + } | ||
64 | + if len(rankTypeList) == 0 { | ||
65 | + log.Info("【自动创建赛季】,获取需要执行自动创建的榜单记录数0,结束任务") | ||
66 | + break LOOP0 | ||
67 | + } | ||
68 | + log.Info("【自动创建赛季】,获取需要执行自动创建的榜单记录数%d", len(rankTypeList)) | ||
69 | + var rankTypeIds []string | ||
70 | + for i := range rankTypeList { | ||
71 | + rankTypeIds = append(rankTypeIds, fmt.Sprintf("%d", rankTypeList[i].RankTypeId)) | ||
72 | + rankTypeCreateAt = rankTypeList[i].CreateTime | ||
73 | + } | ||
74 | + log.Info("【自动创建赛季】,获取自动创建赛季时需要的开始时间") | ||
75 | + runsql2 := fmt.Sprintf(sql2, strings.Join(rankTypeIds, ",")) | ||
76 | + var ( | ||
77 | + rankPeriodList []RankPeriodEndTime | ||
78 | + ) | ||
79 | + rankPeriodMap := make(map[int64]time.Time) | ||
80 | + err = utils.ExecuteQueryAll(&rankPeriodList, runsql2) | ||
81 | + if err != nil { | ||
82 | + log.Error("【自动创建赛季】,获取自动创建赛季时需要的开始时间失败:%s") | ||
83 | + break LOOP0 | ||
84 | + } | ||
85 | + for _, v := range rankPeriodList { | ||
86 | + rankPeriodMap[v.RankTypeId] = v.EndTime | ||
87 | + } | ||
88 | + //开始循环rankTypeList,创建赛季 | ||
89 | + var ( | ||
90 | + successNum int64 | ||
91 | + addRankPeriod []models.RankPeriod | ||
92 | + ) | ||
93 | + nowTime := time.Now() | ||
94 | + LOOP1: | ||
95 | + for _, v := range rankTypeList { | ||
96 | + m := models.RankPeriod{ | ||
97 | + CompanyId: v.CompanyId, | ||
98 | + RankTypeId: v.RankTypeId, | ||
99 | + CreateAt: nowTime, | ||
100 | + UpdateAt: nowTime, | ||
101 | + Status: models.RANKPERIOD_STATUS_NOT, | ||
102 | + IsAuto: 1, | ||
103 | + } | ||
104 | + if t, ok := rankPeriodMap[v.RankTypeId]; ok { | ||
105 | + s := t.Format("2006-01-02") | ||
106 | + dayTime, err := time.ParseInLocation("2006-01-02", s, time.Local) | ||
107 | + if err != nil { | ||
108 | + log.Error("【自动创建赛季】,格式化rank_period的end_time失败,id=%d,end_time=%d", v.RankTypeId, t) | ||
109 | + continue LOOP1 | ||
110 | + } | ||
111 | + begin := dayTime.Unix() + 24*60*60 | ||
112 | + end := begin + v.AutoPeriod*24*60*60 - 1 | ||
113 | + m.BeginTime = time.Unix(begin, 0).Local() | ||
114 | + m.EndTime = time.Unix(end, 0).Local() | ||
115 | + // m.SeasonName = fmt.Sprintf("自动创建赛季%s", s) | ||
116 | + } else { | ||
117 | + s := nowTime.Format("2006-01-02") | ||
118 | + dayTime, _ := time.ParseInLocation("2006-01-02", s, time.Local) | ||
119 | + begin := dayTime.Unix() + 24*60*60 | ||
120 | + end := begin + v.AutoPeriod*24*60*60 - 1 | ||
121 | + m.BeginTime = time.Unix(begin, 0).Local() | ||
122 | + m.EndTime = time.Unix(end, 0).Local() | ||
123 | + // m.SeasonName = fmt.Sprintf("自动创建赛季%s", s) | ||
124 | + } | ||
125 | + if v.RankType == models.RANK_TYPE_YEAR { | ||
126 | + //年榜 | ||
127 | + m.SeasonName = fmt.Sprintf("%d%s", nowTime.Year(), "年赛季") | ||
128 | + } else if v.RankType == models.RANK_TYPE_SEASON { | ||
129 | + //季榜 | ||
130 | + m.SeasonName = fmt.Sprintf("%d%s", nowTime.Month(), "月赛季") | ||
131 | + } | ||
132 | + addRankPeriod = append(addRankPeriod, m) | ||
133 | + } | ||
134 | + successNum, err = o.InsertMulti(100, addRankPeriod) | ||
135 | + if err != nil { | ||
136 | + log.Error("【自动创建赛季】,创建赛季出现错误,添加rank_period数据发生错误:%s", err) | ||
137 | + } | ||
138 | + log.Info("【自动创建赛季】,添加rank_period记录数量:%d", successNum) | ||
139 | + } | ||
140 | + return nil | ||
141 | +} |
services/platform/action.go
0 → 100644
1 | +package platform | ||
2 | + | ||
3 | +import "errors" | ||
4 | + | ||
5 | +type PlatformAction interface { | ||
6 | + DoAction(string, []byte) error | ||
7 | +} | ||
8 | + | ||
9 | +//从主管理平台接收数据数据并处理数据 | ||
10 | +type CommonProtocol struct { | ||
11 | + Module string `json:"module"` //模块 | ||
12 | + Action string `json:"action"` //动作 | ||
13 | + Data interface{} `json:"data"` //实际的未知数据结构 | ||
14 | +} | ||
15 | + | ||
16 | +var actionmap = map[string]PlatformAction{ | ||
17 | + "department": ModuleDeparmentData{}, | ||
18 | + "position": ModulePositionData{}, | ||
19 | + "employee": ModuleEmployee{}, | ||
20 | + "company": ModuleCompanytData{}, | ||
21 | +} | ||
22 | + | ||
23 | +func NewPlatformAction(module string) (PlatformAction, error) { | ||
24 | + if v, ok := actionmap[module]; ok { | ||
25 | + return v, nil | ||
26 | + } | ||
27 | + return nil, errors.New("module cannot found") | ||
28 | +} |
services/platform/company.go
0 → 100644
1 | +package platform | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "oppmg/common/log" | ||
6 | + "oppmg/models" | ||
7 | + | ||
8 | + "github.com/astaxie/beego/orm" | ||
9 | +) | ||
10 | + | ||
11 | +// AdminChance g更换公司主管 | ||
12 | +//companyid 总管理后台的公司id | ||
13 | +func AdminChance(companyid int64, phone string) error { | ||
14 | + var ( | ||
15 | + companyData *models.Company | ||
16 | + userData *models.User | ||
17 | + err error | ||
18 | + newCharge *models.UserCompany | ||
19 | + oldCharge *models.UserCompany | ||
20 | + ) | ||
21 | + companyData, err = models.GetCompanyByUCenter(companyid) | ||
22 | + if err != nil { | ||
23 | + e := fmt.Errorf("获取公司数据失败,总后台company_id:%d", companyid) | ||
24 | + log.Error(err.Error()) | ||
25 | + return e | ||
26 | + } | ||
27 | + userData, err = models.GetUserByPhone(phone) | ||
28 | + if err != nil { | ||
29 | + e := fmt.Errorf("获取用户数据失败,phone:%s", phone) | ||
30 | + log.Error(err.Error()) | ||
31 | + return e | ||
32 | + } | ||
33 | + newCharge, err = models.GetUserCompanyBy(userData.Id, companyData.Id) | ||
34 | + if err != nil { | ||
35 | + e := fmt.Errorf("获取用户和公司的对应关系数据失败,user_id:%d,company_id:%d", userData.Id, companyData.Id) | ||
36 | + log.Error(e.Error()) | ||
37 | + return e | ||
38 | + } | ||
39 | + oldCharge, err = models.GetUserCompanyBy(companyData.AdminId, companyData.Id) | ||
40 | + if err != nil { | ||
41 | + e := fmt.Errorf("获取公司原来的主管对应数据失败,user_id:%d,company_id:%d", companyData.AdminId, companyData.Id) | ||
42 | + log.Error(e.Error()) | ||
43 | + return e | ||
44 | + } | ||
45 | + o := orm.NewOrm() | ||
46 | + o.Begin() | ||
47 | + companyData.AdminId = userData.Id | ||
48 | + err = models.UpdateCompanyById(companyData, []string{"AdminId"}, o) | ||
49 | + if err != nil { | ||
50 | + o.Rollback() | ||
51 | + e := fmt.Errorf("更新公司数据失败,err:%s", err) | ||
52 | + log.Error(e.Error()) | ||
53 | + return e | ||
54 | + } | ||
55 | + newCharge.ChargeStatus = models.USERCOMPANY_CHARGE_YES | ||
56 | + oldCharge.ChargeStatus = models.USERCOMPANY_CHARGE_NO | ||
57 | + err = models.UpdateUserCompanyById(newCharge, []string{"ChargeStatus"}, o) | ||
58 | + if err != nil { | ||
59 | + o.Rollback() | ||
60 | + e := fmt.Errorf("更新原公司主管理员数据失败,user_company_id=%d,err:%s", oldCharge.Id, err) | ||
61 | + log.Error(e.Error()) | ||
62 | + return e | ||
63 | + } | ||
64 | + err = models.UpdateUserCompanyById(oldCharge, []string{"ChargeStatus"}, o) | ||
65 | + if err != nil { | ||
66 | + o.Rollback() | ||
67 | + e := fmt.Errorf("更新新公司主管理员数据失败,user_company_id=%d , err:%s", newCharge.Id, err) | ||
68 | + log.Error(e.Error()) | ||
69 | + return e | ||
70 | + } | ||
71 | + o.Commit() | ||
72 | + return nil | ||
73 | +} |
services/platform/module_company.go
0 → 100644
1 | +package platform | ||
2 | + | ||
3 | +import ( | ||
4 | + "encoding/json" | ||
5 | + "errors" | ||
6 | + "fmt" | ||
7 | + "oppmg/common/log" | ||
8 | + "oppmg/models" | ||
9 | + "oppmg/protocol" | ||
10 | + "oppmg/services/ucenter" | ||
11 | + "oppmg/utils" | ||
12 | + "time" | ||
13 | + | ||
14 | + "github.com/astaxie/beego/orm" | ||
15 | +) | ||
16 | + | ||
17 | +type CompanyBase struct { | ||
18 | + Id int64 `json:"id"` //id | ||
19 | + Name string `json:"name"` //公司名称名称 | ||
20 | + AdminCompanyId int64 `json:"admin_company_id"` | ||
21 | + Logo string `json:"logo"` | ||
22 | + Remarks string `json:"remarks"` | ||
23 | +} | ||
24 | + | ||
25 | +// ModuleCompanytData 主管理平台发送过来的数据 | ||
26 | +type ModuleCompanytData struct { | ||
27 | + Company CompanyBase `json:"company"` | ||
28 | + User ModuleEmployee `json:"user"` | ||
29 | +} | ||
30 | + | ||
31 | +type CompanyCharge struct { | ||
32 | + Id int64 `json:"id"` | ||
33 | + Charge []int64 `json:"charge"` | ||
34 | +} | ||
35 | + | ||
36 | +var _ PlatformAction = ModuleCompanytData{} | ||
37 | + | ||
38 | +func (m ModuleCompanytData) DoAction(code string, jsondata []byte) error { | ||
39 | + switch code { | ||
40 | + case "add": | ||
41 | + var ( | ||
42 | + data ModuleCompanytData | ||
43 | + err error | ||
44 | + ) | ||
45 | + err = json.Unmarshal(jsondata, &data) | ||
46 | + if err != nil { | ||
47 | + return fmt.Errorf("数据解析失败:%s", err) | ||
48 | + } | ||
49 | + return AddCompanyData(data) | ||
50 | + case "edit": | ||
51 | + var ( | ||
52 | + data ModuleCompanytData | ||
53 | + err error | ||
54 | + ) | ||
55 | + err = json.Unmarshal(jsondata, &data) | ||
56 | + if err != nil { | ||
57 | + return fmt.Errorf("数据解析失败:%s", err) | ||
58 | + } | ||
59 | + return UpdateCompanyData(data) | ||
60 | + case "setCompanyCharge": | ||
61 | + var ( | ||
62 | + data CompanyCharge | ||
63 | + err error | ||
64 | + ) | ||
65 | + err = json.Unmarshal(jsondata, &data) | ||
66 | + if err != nil { | ||
67 | + return fmt.Errorf("数据解析失败:%s", err) | ||
68 | + } | ||
69 | + return SetCompanyCharge(data) | ||
70 | + default: | ||
71 | + return errors.New("action not found") | ||
72 | + } | ||
73 | + // return nil | ||
74 | +} | ||
75 | + | ||
76 | +// SetCompanyCharge 更新公司那一级的部门的管理员 | ||
77 | +func SetCompanyCharge(data CompanyCharge) error { | ||
78 | + var ( | ||
79 | + err error | ||
80 | + companyData *models.Company | ||
81 | + departmentData *models.Department | ||
82 | + ) | ||
83 | + companyData, err = models.GetCompanyByUCenter(data.Id) | ||
84 | + if err != nil { | ||
85 | + log.Error("获取公司数据失败,user_center_id=%d,err:%s", data.Id, err) | ||
86 | + return errors.New("获取公司数据失败") | ||
87 | + } | ||
88 | + departmentData, err = models.GetTopDepartmentByCompany(companyData.Id) | ||
89 | + if err != nil { | ||
90 | + log.Error("获取公司一级部门数据失败,company_id=%d, err:%s", companyData.Id, err) | ||
91 | + return errors.New("获取公司一级部门数据失败") | ||
92 | + } | ||
93 | + // 获取公司管理员 | ||
94 | + o := orm.NewOrm() | ||
95 | + o.Begin() | ||
96 | + err = models.ChangeDepartmentCharge(data.Id, departmentData.Id, data.Charge, o) | ||
97 | + if err != nil { | ||
98 | + o.Rollback() | ||
99 | + log.Error("变更公司管理员失败,err:%s", err) | ||
100 | + return errors.New("变更公司管理员失败") | ||
101 | + } | ||
102 | + //更新department数据 | ||
103 | + bt, _ := json.Marshal(data.Charge) | ||
104 | + departmentData.Manages = string(bt) | ||
105 | + err = models.UpdateDepartmentById(departmentData, []string{"Manages"}, o) | ||
106 | + if err != nil { | ||
107 | + o.Rollback() | ||
108 | + log.Error("变更公司管理员失败,err:%s", err) | ||
109 | + return errors.New("变更公司管理员失败") | ||
110 | + } | ||
111 | + o.Commit() | ||
112 | + return nil | ||
113 | +} | ||
114 | + | ||
115 | +func UpdateCompanyData(data ModuleCompanytData) error { | ||
116 | + var ( | ||
117 | + companyData *models.Company | ||
118 | + err error | ||
119 | + ) | ||
120 | + newCompanyData := data.Company | ||
121 | + companyData, err = models.GetCompanyByUCenter(newCompanyData.AdminCompanyId) | ||
122 | + if err == orm.ErrNoRows { | ||
123 | + log.Error("编辑操作,未找到数据,执行添加操作") | ||
124 | + return AddCompanyData(data) | ||
125 | + } | ||
126 | + if err != nil { | ||
127 | + log.Error("获取企业数据失败,user_center_id:%d ,err:%s", newCompanyData.AdminCompanyId, err) | ||
128 | + return errors.New("获取企业数据失败") | ||
129 | + } | ||
130 | + var ( | ||
131 | + oldAdminData *models.UserCompany | ||
132 | + ) | ||
133 | + oldAdminData, err = models.GetUserCompanyBy(companyData.AdminId, companyData.Id) | ||
134 | + if err != nil { | ||
135 | + log.Error("获取公司主管理员user_company数据失败,company_id=%d,user_id=%d,err:%s", companyData.Id, companyData.AdminId, err) | ||
136 | + return errors.New("获取公司主管理员数据失败") | ||
137 | + } | ||
138 | + o := orm.NewOrm() | ||
139 | + o.Begin() | ||
140 | + if data.User.Id != oldAdminData.Id { | ||
141 | + //更新公司主管理员 | ||
142 | + oldAdminData.ChargeStatus = models.USERCOMPANY_CHARGE_NO | ||
143 | + err = models.UpdateUserCompanyById(oldAdminData, []string{"ChargeStatus"}, o) | ||
144 | + if err != nil { | ||
145 | + o.Rollback() | ||
146 | + log.Error("去除旧的主管理员失败:user_company_id=%d,err:%s", oldAdminData.Id, err) | ||
147 | + return errors.New("去除旧的更主管理员失败") | ||
148 | + } | ||
149 | + var newAdminData *models.UserCompany | ||
150 | + newAdminData, err = models.GetUserCompanyById(data.User.Id) | ||
151 | + if err != nil { | ||
152 | + o.Rollback() | ||
153 | + log.Error("获取新的主管理员失败,user_company_id=%d,err:%s", data.User.Id, err) | ||
154 | + return errors.New("获取新的主管理员") | ||
155 | + } | ||
156 | + newAdminData.ChargeStatus = models.USERCOMPANY_CHARGE_YES | ||
157 | + err = models.UpdateUserCompanyById(newAdminData, []string{"ChargeStatus"}, o) | ||
158 | + if err != nil { | ||
159 | + o.Rollback() | ||
160 | + log.Error("变更更主管理员失败:user_company_id=%d,err:%s", newAdminData.Id, err) | ||
161 | + return errors.New("变更主管理员失败") | ||
162 | + } | ||
163 | + companyData.AdminId = newAdminData.UserId | ||
164 | + } | ||
165 | + companyData.Logo = newCompanyData.Logo | ||
166 | + companyData.Name = newCompanyData.Name | ||
167 | + companyData.Remark = newCompanyData.Remarks | ||
168 | + err = models.UpdateCompanyById(companyData, []string{"Logo", "Name", "AdminId", "Remark"}, o) | ||
169 | + if err != nil { | ||
170 | + o.Rollback() | ||
171 | + log.Error("更新公司数据失败:%s", err) | ||
172 | + return errors.New("更新公司数据失败") | ||
173 | + } | ||
174 | + o.Commit() | ||
175 | + return nil | ||
176 | +} | ||
177 | + | ||
178 | +//AddCompanyData 新增公司 初始化公司 | ||
179 | +func AddCompanyData(data ModuleCompanytData) error { | ||
180 | + var ( | ||
181 | + newDeparment *models.Department | ||
182 | + newRoleGroup *models.Role | ||
183 | + newRole *models.Role | ||
184 | + newUser *models.User | ||
185 | + newCompany *models.Company | ||
186 | + newUserCompany *models.UserCompany | ||
187 | + err error | ||
188 | + ) | ||
189 | + log.Info("获取统一户中心的数据") | ||
190 | + ucenterReturn, err := ucenter.RequestUCenterAddUser(data.User.Phone, data.User.Name, "") | ||
191 | + if err != nil { | ||
192 | + log.Error("请求统一用户中心数据失败:%s", err) | ||
193 | + return errors.New("获取统一用户中心数据失败") | ||
194 | + } | ||
195 | + data.User.OpenId = ucenterReturn.Data.Id | ||
196 | + o := orm.NewOrm() | ||
197 | + o.Begin() | ||
198 | + //处理用户数据 | ||
199 | + log.Info("添加user表数据") | ||
200 | + newUser, err = AddAdminUser(&data, o) | ||
201 | + if err != nil { | ||
202 | + o.Rollback() | ||
203 | + log.Error("处理公司主管数据失败:%s", err) | ||
204 | + return errors.New("处理公司主管数据失败") | ||
205 | + } | ||
206 | + //处理公司数据 | ||
207 | + log.Info("添加company表数据") | ||
208 | + newCompany, err = AddCompanyBase(&data, newUser, o) | ||
209 | + if err != nil { | ||
210 | + o.Rollback() | ||
211 | + log.Error("处理公司数据失败:%s", err) | ||
212 | + return errors.New("处理公司数据失败") | ||
213 | + } | ||
214 | + //处理评分配置数据 初始化 | ||
215 | + log.Info("添加sys_config表数据") | ||
216 | + err = iniSysConfig(int(newCompany.Id), o) | ||
217 | + if err != nil { | ||
218 | + o.Rollback() | ||
219 | + log.Error("处理评分配置数据失败:%s", err) | ||
220 | + return errors.New("处理评分配置数据") | ||
221 | + } | ||
222 | + //添加user_company | ||
223 | + log.Info("添加user_copmany表数据") | ||
224 | + newUserCompany, err = AddUserCompanyData(&data, newCompany, newUser, o) | ||
225 | + if err != nil { | ||
226 | + o.Rollback() | ||
227 | + log.Error("处理user_company数据失败:%s", err) | ||
228 | + return errors.New("处理user_company数据失败") | ||
229 | + } | ||
230 | + //添加部门 | ||
231 | + log.Info("添加department表数据") | ||
232 | + newDeparment, err = AddFirstDepartment(newCompany, newUserCompany, o) | ||
233 | + if err != nil { | ||
234 | + o.Rollback() | ||
235 | + log.Error("处理部门数据失败:%s", err) | ||
236 | + return errors.New("处理部门数据失败") | ||
237 | + } | ||
238 | + //添加用户部门数据 | ||
239 | + log.Info("添加user_department表数据") | ||
240 | + _, err = initUserDedaprtmet(newDeparment, newUserCompany, o) | ||
241 | + if err != nil { | ||
242 | + o.Rollback() | ||
243 | + log.Error("处理user_department数据失败:%s", err) | ||
244 | + return protocol.NewErrWithMessage("1") | ||
245 | + } | ||
246 | + //添加部门主管 | ||
247 | + log.Info("添加department_charge表数据") | ||
248 | + err = AddFirstDepartmentCharge(newDeparment, newUserCompany, newCompany, o) | ||
249 | + if err != nil { | ||
250 | + o.Rollback() | ||
251 | + log.Error("处理部门主管数据,err:%s", err) | ||
252 | + return errors.New("处理部门主管数据") | ||
253 | + } | ||
254 | + //添加角色组 | ||
255 | + log.Info("添加role表数据") | ||
256 | + newRoleGroup, err = initRoleGroup(newCompany, o) | ||
257 | + if err != nil { | ||
258 | + o.Rollback() | ||
259 | + log.Error("处理角色组数据失败:%s", err) | ||
260 | + return protocol.NewErrWithMessage("1") | ||
261 | + } | ||
262 | + //添加角色 | ||
263 | + log.Info("添加role表数据") | ||
264 | + newRole, err = initRole(newCompany, newRoleGroup, o) | ||
265 | + if err != nil { | ||
266 | + o.Rollback() | ||
267 | + log.Error("处理角色数据失败:%s", err) | ||
268 | + return protocol.NewErrWithMessage("1") | ||
269 | + } | ||
270 | + //添加用户的角色 | ||
271 | + log.Info("添加user_role表数据") | ||
272 | + _, err = initUserRole(newUserCompany, newRole, o) | ||
273 | + if err != nil { | ||
274 | + o.Rollback() | ||
275 | + log.Error("处理user_role数据失败:%s", err) | ||
276 | + return protocol.NewErrWithMessage("1") | ||
277 | + } | ||
278 | + o.Commit() | ||
279 | + return nil | ||
280 | +} | ||
281 | + | ||
282 | +func AddAdminUser(centerCompany *ModuleCompanytData, o orm.Ormer) (*models.User, error) { | ||
283 | + var ( | ||
284 | + err error | ||
285 | + newUser = &models.User{} | ||
286 | + ) | ||
287 | + companyAdminData := centerCompany.User | ||
288 | + err = o.QueryTable(&models.User{}). | ||
289 | + Filter("phone", companyAdminData.Phone). | ||
290 | + One(newUser) | ||
291 | + if err == nil { | ||
292 | + return newUser, nil | ||
293 | + } | ||
294 | + //添加用户 | ||
295 | + newUser = &models.User{ | ||
296 | + Id: companyAdminData.Id, | ||
297 | + Phone: companyAdminData.Phone, | ||
298 | + NickName: companyAdminData.Name, | ||
299 | + UserCenterId: companyAdminData.OpenId, | ||
300 | + } | ||
301 | + _, err = models.AddUser(newUser, o) | ||
302 | + if err != nil { | ||
303 | + log.Error("添加用户数据失败:%s", err) | ||
304 | + return nil, err | ||
305 | + } | ||
306 | + | ||
307 | + return newUser, nil | ||
308 | +} | ||
309 | + | ||
310 | +func AddCompanyBase(centerCompany *ModuleCompanytData, admininfo *models.User, o orm.Ormer) (*models.Company, error) { | ||
311 | + var ( | ||
312 | + err error | ||
313 | + ) | ||
314 | + companybase := centerCompany.Company | ||
315 | + newCompany := &models.Company{ | ||
316 | + Id: companybase.Id, | ||
317 | + Name: companybase.Name, | ||
318 | + AdminId: admininfo.Id, | ||
319 | + UserCenterId: companybase.AdminCompanyId, | ||
320 | + Enable: models.COMPANY_ENABLE_NO, | ||
321 | + Logo: companybase.Logo, | ||
322 | + Remark: companybase.Remarks, | ||
323 | + } | ||
324 | + _, err = models.AddCompany(newCompany, o) | ||
325 | + if err != nil { | ||
326 | + log.Error("添加公司数据失败:%s", err) | ||
327 | + return nil, err | ||
328 | + } | ||
329 | + return newCompany, nil | ||
330 | +} | ||
331 | + | ||
332 | +func AddUserCompanyData(centerCompany *ModuleCompanytData, newcompany *models.Company, newuser *models.User, o orm.Ormer) (*models.UserCompany, error) { | ||
333 | + var ( | ||
334 | + err error | ||
335 | + uc = &models.UserCompany{} | ||
336 | + ) | ||
337 | + adminUserData := centerCompany.User | ||
338 | + err = o.QueryTable(&models.UserCompany{}). | ||
339 | + Filter("company_id", newcompany.Id). | ||
340 | + Filter("user_id", newuser.Id). | ||
341 | + Filter("delete_at", 0). | ||
342 | + One(uc) | ||
343 | + if err == nil { | ||
344 | + return uc, nil | ||
345 | + } | ||
346 | + uc = &models.UserCompany{ | ||
347 | + UserId: newuser.Id, | ||
348 | + CompanyId: newcompany.Id, | ||
349 | + Enable: models.USERCOMPANY_ENABLE_YES, | ||
350 | + ChargeStatus: adminUserData.ChargeStatus, | ||
351 | + Id: adminUserData.Id, | ||
352 | + NickName: adminUserData.Name, | ||
353 | + OpenId: adminUserData.OpenId, | ||
354 | + Sex: adminUserData.Sex, | ||
355 | + JobNum: adminUserData.JobNum, | ||
356 | + Phone: adminUserData.Phone, | ||
357 | + PrivatePhone: adminUserData.PrivatePhone, | ||
358 | + Email: adminUserData.Email, | ||
359 | + ExtensionNum: adminUserData.ExtensionNum, | ||
360 | + Workspace: adminUserData.WorkSpace, | ||
361 | + IsBusiness: adminUserData.IsBusiness, | ||
362 | + Avatar: adminUserData.Avatar, | ||
363 | + Remarks: adminUserData.Remarks, | ||
364 | + AdminType: adminUserData.AdminType, | ||
365 | + ExtraText: adminUserData.ExtraText, | ||
366 | + } | ||
367 | + _, err = models.AddUserCompany(uc, o) | ||
368 | + if err != nil { | ||
369 | + log.Error("添加user_company数据失败:%s", err) | ||
370 | + return nil, err | ||
371 | + } | ||
372 | + return uc, nil | ||
373 | +} | ||
374 | + | ||
375 | +//AddFirstDepartment 创建公司的一级部门 | ||
376 | +func AddFirstDepartment(newCompany *models.Company, newusercompany *models.UserCompany, o orm.Ormer) (*models.Department, error) { | ||
377 | + var ( | ||
378 | + newDepartment = &models.Department{} | ||
379 | + err error | ||
380 | + ) | ||
381 | + err = o.QueryTable(&models.Department{}). | ||
382 | + Filter("company_id", newCompany.Id). | ||
383 | + Filter("is_top", 1). | ||
384 | + One(newDepartment) | ||
385 | + if err == nil { | ||
386 | + return newDepartment, nil | ||
387 | + } else if err == orm.ErrNoRows { | ||
388 | + //添加部门 | ||
389 | + newDepartment = &models.Department{ | ||
390 | + CompanyId: newCompany.Id, | ||
391 | + Name: newCompany.Name, | ||
392 | + IsTop: 1, | ||
393 | + ParentId: 0, | ||
394 | + Relation: fmt.Sprint(utils.GenerateIDBySonyflake()), | ||
395 | + Id: utils.GenerateID14(), | ||
396 | + } | ||
397 | + _, err = models.AddDepartment(newDepartment, o) | ||
398 | + if err != nil { | ||
399 | + log.Error("添加部门数据失败:%s", err) | ||
400 | + return nil, err | ||
401 | + } | ||
402 | + newDepartment.SetRelation(nil) | ||
403 | + err = models.UpdateDepartmentById(newDepartment, []string{"Relation"}, o) | ||
404 | + if err != nil { | ||
405 | + log.Error("更新部门关系树数据失败:%s", err) | ||
406 | + return nil, err | ||
407 | + } | ||
408 | + } else { | ||
409 | + log.Error("查询部门数据失败:%s", err) | ||
410 | + return nil, err | ||
411 | + } | ||
412 | + | ||
413 | + return newDepartment, nil | ||
414 | +} | ||
415 | + | ||
416 | +func AddFirstDepartmentCharge(newDepartment *models.Department, newUserCompany *models.UserCompany, newCompany *models.Company, o orm.Ormer) error { | ||
417 | + var ( | ||
418 | + err error | ||
419 | + ) | ||
420 | + departmentCharg := &models.DepartmentCharge{ | ||
421 | + CompanyId: newCompany.Id, | ||
422 | + DepartmentId: newDepartment.Id, | ||
423 | + UserCompanyId: newUserCompany.Id, | ||
424 | + } | ||
425 | + _, err = models.AddDepartmentCharge(departmentCharg, o) | ||
426 | + if err != nil { | ||
427 | + log.Error("设置部门主管失败,err:%s", err) | ||
428 | + return err | ||
429 | + } | ||
430 | + newDepartment.SetManages([]int64{newUserCompany.Id}) | ||
431 | + err = models.UpdateDepartmentById(newDepartment, []string{"Manages"}, o) | ||
432 | + if err != nil { | ||
433 | + log.Error("设置部门主管失败,err:%s", err) | ||
434 | + return err | ||
435 | + } | ||
436 | + return nil | ||
437 | +} | ||
438 | + | ||
439 | +func UpdateCompany(centerCompany *ModuleCompanytData, admininfo *models.User, o orm.Ormer) (*models.Company, error) { | ||
440 | + var ( | ||
441 | + err error | ||
442 | + newCompany = &models.Company{} | ||
443 | + ) | ||
444 | + err = o.QueryTable(&models.Company{}). | ||
445 | + Filter("user_center_id", centerCompany.Company.AdminCompanyId). | ||
446 | + One(newCompany) | ||
447 | + if err == nil { | ||
448 | + _, err = o.QueryTable(&models.Company{}). | ||
449 | + Filter("user_center_id", centerCompany.Company.AdminCompanyId). | ||
450 | + Update(orm.Params{ | ||
451 | + "name": centerCompany.Company.Name, | ||
452 | + "admin_id": admininfo.Id, | ||
453 | + "delete_at": 0, | ||
454 | + }) | ||
455 | + if err != nil { | ||
456 | + log.Error("更新公司数据失败:%s", err) | ||
457 | + return nil, err | ||
458 | + } | ||
459 | + } else { | ||
460 | + log.Error("查询公司数据失败:%s", err) | ||
461 | + return nil, err | ||
462 | + } | ||
463 | + return newCompany, nil | ||
464 | +} | ||
465 | + | ||
466 | +// func initAdminUser(centerCompany *ModuleCompanytData, o orm.Ormer) (*models.User, error) { | ||
467 | +// var ( | ||
468 | +// err error | ||
469 | +// newUser = &models.User{} | ||
470 | +// ) | ||
471 | +// companyAdminData := centerCompany.User | ||
472 | +// err = o.QueryTable(&models.User{}). | ||
473 | +// Filter("phone", companyAdminData.Phone). | ||
474 | +// Filter("delete_at", 0). | ||
475 | +// One(newUser) | ||
476 | +// if err == nil { | ||
477 | +// // 更新数据 | ||
478 | +// _, err = o.QueryTable(&models.User{}). | ||
479 | +// Filter("user_center_id", companyAdminData.OpenId). | ||
480 | +// Filter("delete_at", 0). | ||
481 | +// Update(orm.Params{ | ||
482 | +// "nick_name": companyAdminData.Name, | ||
483 | +// "phone": companyAdminData.Phone, | ||
484 | +// "enable_status": models.USER_ENABLE_YES, | ||
485 | +// }) | ||
486 | +// if err != nil { | ||
487 | +// log.Error("数据操作失败:%s", err) | ||
488 | +// return nil, err | ||
489 | +// } | ||
490 | +// } else if err == orm.ErrNoRows { | ||
491 | +// var ( | ||
492 | +// ucenterUser = &ucenter.ResponseAddUser{} | ||
493 | +// err error | ||
494 | +// ) | ||
495 | +// ucenterUser, err = ucenter.RequestUCenterAddUser(companyAdminData.Phone, companyAdminData.Name, "") | ||
496 | +// if err != nil { | ||
497 | +// log.Error("获取统一用户中心数据失败 :%s", err) | ||
498 | +// return nil, err | ||
499 | +// } | ||
500 | +// //添加用户 | ||
501 | +// newUser = &models.User{ | ||
502 | +// Id: companyAdminData.Id, | ||
503 | +// Phone: companyAdminData.Phone, | ||
504 | +// NickName: companyAdminData.Name, | ||
505 | +// Icon: ucenterUser.Data.Avatar, | ||
506 | +// Accid: ucenterUser.Data.Accid, | ||
507 | +// UserCenterId: ucenterUser.Data.Id, | ||
508 | +// CsAccount: ucenterUser.Data.CustomerAccount, | ||
509 | +// } | ||
510 | +// _, err = models.AddUser(newUser, o) | ||
511 | +// if err != nil { | ||
512 | +// log.Error("添加用户数据失败:%s", err) | ||
513 | +// return nil, err | ||
514 | +// } | ||
515 | +// } else { | ||
516 | +// log.Error("查询用户数据失败:%s", err) | ||
517 | +// return nil, err | ||
518 | +// } | ||
519 | +// return newUser, nil | ||
520 | +// } | ||
521 | + | ||
522 | +// func initUserCompany(newcompany *models.Company, newuser *models.User, o orm.Ormer) (*models.UserCompany, error) { | ||
523 | +// var ( | ||
524 | +// err error | ||
525 | +// uc = &models.UserCompany{} | ||
526 | +// ) | ||
527 | +// err = o.QueryTable(&models.UserCompany{}). | ||
528 | +// Filter("user_id", newuser.Id). | ||
529 | +// Filter("company_id", newcompany.Id). | ||
530 | +// Filter("delete_at", 0). | ||
531 | +// One(uc) | ||
532 | +// if err == nil { | ||
533 | +// _, err = o.QueryTable(&models.UserCompany{}). | ||
534 | +// Filter("id", uc.Id). | ||
535 | +// Update(orm.Params{ | ||
536 | +// "enable": models.USERCOMPANY_ENABLE_YES, | ||
537 | +// }) | ||
538 | +// if err != nil { | ||
539 | +// log.Error("更新user_company数据失败:%s", err) | ||
540 | +// return nil, err | ||
541 | +// } | ||
542 | +// } else if err == orm.ErrNoRows { | ||
543 | +// uc = &models.UserCompany{ | ||
544 | +// UserId: newuser.Id, | ||
545 | +// CompanyId: newcompany.Id, | ||
546 | +// OpenId: newuser.UserCenterId, | ||
547 | +// Enable: models.USERCOMPANY_ENABLE_YES, | ||
548 | +// ChargeStatus: models.USERCOMPANY_CHARGE_YES, | ||
549 | +// } | ||
550 | +// _, err = models.AddUserCompany(uc, o) | ||
551 | +// if err != nil { | ||
552 | +// log.Error("添加user_company数据失败:%s", err) | ||
553 | +// return nil, err | ||
554 | +// } | ||
555 | +// } else { | ||
556 | +// log.Error("获取user_company数据失败:%s", err) | ||
557 | +// return nil, err | ||
558 | +// } | ||
559 | +// return uc, nil | ||
560 | +// } | ||
561 | + | ||
562 | +// func initDepartment(newCompany *models.Company, newusercompany *models.UserCompany, o orm.Ormer) (*models.Department, error) { | ||
563 | +// var ( | ||
564 | +// newDepartment = &models.Department{} | ||
565 | +// err error | ||
566 | +// ) | ||
567 | +// err = o.QueryTable(&models.Department{}). | ||
568 | +// Filter("company_id", newCompany.Id). | ||
569 | +// Filter("is_top", 1). | ||
570 | +// One(newDepartment) | ||
571 | +// if err == nil { | ||
572 | +// newDepartment.Name = newCompany.Name | ||
573 | +// err = models.UpdateDepartmentById(newDepartment, []string{"Name"}, o) | ||
574 | +// if err != nil { | ||
575 | +// log.Error("更新部门关系树数据失败:%s", err) | ||
576 | +// return nil, err | ||
577 | +// } | ||
578 | +// return newDepartment, nil | ||
579 | +// } else if err == orm.ErrNoRows { | ||
580 | +// //添加部门 | ||
581 | +// newDepartment = &models.Department{ | ||
582 | +// CompanyId: newCompany.Id, | ||
583 | +// Name: newCompany.Name, | ||
584 | +// IsTop: 1, | ||
585 | +// ParentId: 0, | ||
586 | +// Relation: fmt.Sprint(utils.GenerateIDBySonyflake()), | ||
587 | +// } | ||
588 | +// newDepartment.SetManages([]int64{newusercompany.Id}) | ||
589 | +// _, err = models.AddDepartment(newDepartment, o) | ||
590 | +// if err != nil { | ||
591 | +// log.Error("添加部门数据失败:%s", err) | ||
592 | +// return nil, err | ||
593 | +// } | ||
594 | +// newDepartment.SetRelation(nil) | ||
595 | +// err = models.UpdateDepartmentById(newDepartment, []string{"Relation"}, o) | ||
596 | +// if err != nil { | ||
597 | +// log.Error("更新部门关系树数据失败:%s", err) | ||
598 | +// return nil, err | ||
599 | +// } | ||
600 | +// } else { | ||
601 | +// log.Error("查询部门数据失败:%s", err) | ||
602 | +// return nil, err | ||
603 | +// } | ||
604 | + | ||
605 | +// return newDepartment, nil | ||
606 | +// } | ||
607 | + | ||
608 | +//initUserDedaprtmet 设置用户和部门关系 | ||
609 | +func initUserDedaprtmet(newDepartment *models.Department, newUserCompany *models.UserCompany, o orm.Ormer) (*models.UserDepartment, error) { | ||
610 | + var ( | ||
611 | + newUserDepartment = &models.UserDepartment{} | ||
612 | + err error | ||
613 | + ) | ||
614 | + err = o.QueryTable(&models.UserDepartment{}). | ||
615 | + Filter("department_id", newDepartment.Id). | ||
616 | + Filter("user_company_id", newUserCompany.Id). | ||
617 | + Filter("enable_status", models.USER_DEPARTMENT_ENABLE_YES). | ||
618 | + One(newUserDepartment) | ||
619 | + if err == nil { | ||
620 | + return newUserDepartment, nil | ||
621 | + } else if err == orm.ErrNoRows { | ||
622 | + //添加部门 | ||
623 | + newUserDepartment = &models.UserDepartment{ | ||
624 | + UserCompanyId: newUserCompany.Id, | ||
625 | + //UserId: newUserCompany.UserId, | ||
626 | + CompanyId: newUserCompany.CompanyId, | ||
627 | + DepartmentId: newDepartment.Id, | ||
628 | + } | ||
629 | + _, err = models.AddUserDepartment(newUserDepartment, o) | ||
630 | + if err != nil { | ||
631 | + log.Error("添加部门数据失败:%s", err) | ||
632 | + return nil, err | ||
633 | + } | ||
634 | + } else { | ||
635 | + log.Error("查询部门数据失败:%s", err) | ||
636 | + return nil, err | ||
637 | + } | ||
638 | + | ||
639 | + return newUserDepartment, nil | ||
640 | +} | ||
641 | + | ||
642 | +//initRoleGroup 设置初始的角色组 | ||
643 | +func initRoleGroup(newCompany *models.Company, o orm.Ormer) (*models.Role, error) { | ||
644 | + var ( | ||
645 | + newRoleGroup = &models.Role{} | ||
646 | + err error | ||
647 | + ) | ||
648 | + err = o.QueryTable(&models.Role{}). | ||
649 | + Filter("delete_at", 0). | ||
650 | + Filter("is_default", models.ROLE_DEFAULR). | ||
651 | + Filter("types", models.ROLETYPES_GROUP). | ||
652 | + Filter("company_id", newCompany.Id). | ||
653 | + One(newRoleGroup) | ||
654 | + if err == nil { | ||
655 | + return newRoleGroup, nil | ||
656 | + } else if err == orm.ErrNoRows { | ||
657 | + //添加部角色组 | ||
658 | + newRoleGroup = &models.Role{ | ||
659 | + Types: models.ROLETYPES_GROUP, | ||
660 | + CompanyId: newCompany.Id, | ||
661 | + IsDefault: models.ROLE_DEFAULR, | ||
662 | + Name: "管理员", | ||
663 | + } | ||
664 | + _, err = models.AddRole(newRoleGroup, o) | ||
665 | + if err != nil { | ||
666 | + log.Error("添加角色组数据失败:%s", err) | ||
667 | + return nil, err | ||
668 | + } | ||
669 | + } else { | ||
670 | + log.Error("查询角色组数据失败:%s", err) | ||
671 | + return nil, err | ||
672 | + } | ||
673 | + | ||
674 | + return newRoleGroup, nil | ||
675 | +} | ||
676 | + | ||
677 | +//initRole 初始化公司的角色 | ||
678 | +func initRole(newCompany *models.Company, newRoleGroup *models.Role, o orm.Ormer) (*models.Role, error) { | ||
679 | + var ( | ||
680 | + newRole = &models.Role{} | ||
681 | + err error | ||
682 | + ) | ||
683 | + err = o.QueryTable(&models.Role{}). | ||
684 | + Filter("delete_at", 0). | ||
685 | + Filter("is_default", models.ROLE_DEFAULR). | ||
686 | + Filter("types", models.ROLETYPES_ROLE). | ||
687 | + Filter("company_id", newCompany.Id). | ||
688 | + One(newRole) | ||
689 | + if err == nil { | ||
690 | + return newRole, nil | ||
691 | + } else if err == orm.ErrNoRows { | ||
692 | + //添加部门 | ||
693 | + newRole = &models.Role{ | ||
694 | + Types: models.ROLETYPES_ROLE, | ||
695 | + CompanyId: newCompany.Id, | ||
696 | + IsDefault: models.ROLE_DEFAULR, | ||
697 | + Name: "主管理员", | ||
698 | + Pid: newRoleGroup.Id, | ||
699 | + } | ||
700 | + _, err = models.AddRole(newRole, o) | ||
701 | + if err != nil { | ||
702 | + log.Error("添加角色数据失败:%s", err) | ||
703 | + return nil, err | ||
704 | + } | ||
705 | + } else { | ||
706 | + log.Error("查询角色数据失败:%s", err) | ||
707 | + return nil, err | ||
708 | + } | ||
709 | + | ||
710 | + return newRole, nil | ||
711 | +} | ||
712 | + | ||
713 | +//initUserRole 初始化第一个用户和角色的关系 | ||
714 | +func initUserRole(newUserCompany *models.UserCompany, newRole *models.Role, o orm.Ormer) (*models.UserRole, error) { | ||
715 | + var ( | ||
716 | + newUserRole = &models.UserRole{} | ||
717 | + err error | ||
718 | + ) | ||
719 | + err = o.QueryTable(&models.UserRole{}). | ||
720 | + Filter("enable_status", models.USER_ROLE_ENABLE_YES). | ||
721 | + Filter("user_company_id", newUserCompany.Id). | ||
722 | + Filter("role_id", newRole.Id). | ||
723 | + One(newUserRole) | ||
724 | + if err == nil { | ||
725 | + return newUserRole, nil | ||
726 | + } else if err == orm.ErrNoRows { | ||
727 | + //添加UserRole | ||
728 | + newUserRole = &models.UserRole{ | ||
729 | + RoleId: newRole.Id, | ||
730 | + UserCompanyId: newUserCompany.Id, | ||
731 | + CompanyId: newUserCompany.CompanyId, | ||
732 | + } | ||
733 | + _, err = models.AddUserRole(newUserRole, o) | ||
734 | + if err != nil { | ||
735 | + log.Error("添加user_role数据失败:%s", err) | ||
736 | + return nil, err | ||
737 | + } | ||
738 | + } else { | ||
739 | + log.Error("查询user_role数据失败:%s", err) | ||
740 | + return nil, err | ||
741 | + } | ||
742 | + | ||
743 | + return newUserRole, nil | ||
744 | +} | ||
745 | + | ||
746 | +//iniSysConfig 初始化公司的系统配置 | ||
747 | +func iniSysConfig(companyid int, o orm.Ormer) error { | ||
748 | + var ( | ||
749 | + m *models.SysConfig | ||
750 | + err error | ||
751 | + ) | ||
752 | + m, err = models.GetSysConfigByCompanyId(companyid, models.KeyScore) | ||
753 | + if err == nil { | ||
754 | + return nil | ||
755 | + } | ||
756 | + v := protocol.ScoreConfig{ | ||
757 | + DiscoveryScore: &protocol.DiscoveryScore{ | ||
758 | + BasicFactor: 1, | ||
759 | + ExtraFactor: 1, | ||
760 | + ValueFactor: 1, | ||
761 | + }, | ||
762 | + SumScore: &protocol.SumScore{ | ||
763 | + DiscoveryFactor: 1, | ||
764 | + CatchFactor: 1, | ||
765 | + }, | ||
766 | + BasicScore: &protocol.ScoreRange{ | ||
767 | + Max: 10000, | ||
768 | + Min: 0, | ||
769 | + Step: 1, | ||
770 | + }, | ||
771 | + ExtraScore: &protocol.ScoreRange{ | ||
772 | + Max: 10000, | ||
773 | + Min: 0, | ||
774 | + Step: 1, | ||
775 | + }, | ||
776 | + ValueScore: &protocol.ScoreRange{ | ||
777 | + Max: 10000, | ||
778 | + Min: 0, | ||
779 | + Step: 1, | ||
780 | + }, | ||
781 | + } | ||
782 | + bt, _ := json.Marshal(v) | ||
783 | + m = &models.SysConfig{ | ||
784 | + Key: models.KeyScore, | ||
785 | + CompanyId: companyid, | ||
786 | + CreateAt: time.Now(), | ||
787 | + UpdateAt: time.Now(), | ||
788 | + Content: string(bt), | ||
789 | + } | ||
790 | + _, err = models.AddSysConfig(m, o) | ||
791 | + return err | ||
792 | +} |
services/platform/module_department.go
0 → 100644
1 | +package platform | ||
2 | + | ||
3 | +import ( | ||
4 | + "encoding/json" | ||
5 | + "errors" | ||
6 | + "fmt" | ||
7 | + "oppmg/common/log" | ||
8 | + "oppmg/models" | ||
9 | + "oppmg/utils" | ||
10 | + "sort" | ||
11 | + "strings" | ||
12 | + "time" | ||
13 | + | ||
14 | + "github.com/astaxie/beego/orm" | ||
15 | +) | ||
16 | + | ||
17 | +// ModuleDeparmentData 主管理平台发送过来的数据 | ||
18 | +type ModuleDeparmentData struct { | ||
19 | + Id int64 `json:"id"` //id | ||
20 | + Name string `json:"name"` //部门名称 | ||
21 | + ParentId int64 `json:"parent_id"` //父级id | ||
22 | + CompanyId int64 `json:"company_id"` | ||
23 | + Path string `json:"path"` | ||
24 | + Level int `json:"level"` | ||
25 | + Charge []int64 `json:"charge"` //部门主管 | ||
26 | +} | ||
27 | + | ||
28 | +type SortDepartmentByLevel []ModuleDeparmentData | ||
29 | + | ||
30 | +func (a SortDepartmentByLevel) Len() int { return len(a) } | ||
31 | +func (a SortDepartmentByLevel) Swap(i, j int) { a[i], a[j] = a[j], a[i] } | ||
32 | +func (a SortDepartmentByLevel) Less(i, j int) bool { return a[i].Level < a[j].Level } | ||
33 | + | ||
34 | +var _ PlatformAction = ModuleDeparmentData{} | ||
35 | + | ||
36 | +//DoAction PlatformAction 的接口实现 | ||
37 | +func (m ModuleDeparmentData) DoAction(code string, jsondata []byte) error { | ||
38 | + switch code { | ||
39 | + case "edit": | ||
40 | + var ( | ||
41 | + data ModuleDeparmentData | ||
42 | + err error | ||
43 | + ) | ||
44 | + err = json.Unmarshal(jsondata, &data) | ||
45 | + if err != nil { | ||
46 | + return fmt.Errorf("数据解析失败:%s", err) | ||
47 | + } | ||
48 | + return UpdateDepartmentData(data) | ||
49 | + case "add": | ||
50 | + var ( | ||
51 | + data ModuleDeparmentData | ||
52 | + err error | ||
53 | + ) | ||
54 | + err = json.Unmarshal(jsondata, &data) | ||
55 | + if err != nil { | ||
56 | + return fmt.Errorf("数据解析失败:%s", err) | ||
57 | + } | ||
58 | + datas := []ModuleDeparmentData{data} | ||
59 | + return AddDepartmentData(datas) | ||
60 | + case "batchDelete": | ||
61 | + var ( | ||
62 | + err error | ||
63 | + ) | ||
64 | + ids := struct { | ||
65 | + Ids []int64 `json:"ids"` | ||
66 | + }{} | ||
67 | + err = json.Unmarshal(jsondata, &ids) | ||
68 | + if err != nil { | ||
69 | + return fmt.Errorf("数据解析失败:%s", err) | ||
70 | + } | ||
71 | + if len(ids.Ids) == 0 { | ||
72 | + return fmt.Errorf("参数错误") | ||
73 | + } | ||
74 | + return DeleteDepartmentData(ids.Ids) | ||
75 | + case "import": | ||
76 | + var ( | ||
77 | + data []ModuleDeparmentData | ||
78 | + err error | ||
79 | + ) | ||
80 | + err = json.Unmarshal(jsondata, &data) | ||
81 | + if err != nil { | ||
82 | + return fmt.Errorf("数据解析失败:%s", err) | ||
83 | + } | ||
84 | + return AddDepartmentData(data) | ||
85 | + default: | ||
86 | + return errors.New("action not found") | ||
87 | + } | ||
88 | + // return nil | ||
89 | +} | ||
90 | + | ||
91 | +//同步 部门数据 | ||
92 | +//UpdateDepartmentData .... | ||
93 | +func UpdateDepartmentData(data ModuleDeparmentData) error { | ||
94 | + var ( | ||
95 | + departmentData *models.Department | ||
96 | + err error | ||
97 | + ) | ||
98 | + | ||
99 | + departmentData, err = models.GetDepartmentById(data.Id) | ||
100 | + if err == orm.ErrNoRows { | ||
101 | + log.Error("编辑操作,未找到数据,执行添加操作") | ||
102 | + return AddDepartmentData([]ModuleDeparmentData{data}) | ||
103 | + } | ||
104 | + if err != nil { | ||
105 | + e := fmt.Errorf("获取部门数据失败,err:%s", err) | ||
106 | + log.Error(e.Error()) | ||
107 | + return errors.New("获取部门数据失败") | ||
108 | + } | ||
109 | + departmentData.Name = data.Name | ||
110 | + o := orm.NewOrm() | ||
111 | + o.Begin() | ||
112 | + err = models.UpdateDepartmentById(departmentData, []string{"Name"}, o) | ||
113 | + if err != nil { | ||
114 | + o.Rollback() | ||
115 | + e := fmt.Errorf("更新部门数据失败,err:%s", err) | ||
116 | + log.Error(e.Error()) | ||
117 | + return errors.New("更新部门数据失败") | ||
118 | + } | ||
119 | + //更新部门管理员 | ||
120 | + err = models.ChangeDepartmentCharge(data.Id, departmentData.Id, data.Charge, o) | ||
121 | + if err != nil { | ||
122 | + o.Rollback() | ||
123 | + log.Error("变更公司管理员失败,err:%s", err) | ||
124 | + return errors.New("变更公司管理员失败") | ||
125 | + } | ||
126 | + o.Commit() | ||
127 | + var ( | ||
128 | + newParentDepart *models.Department | ||
129 | + ) | ||
130 | + if data.ParentId == 0 { | ||
131 | + newParentDepart, err = models.GetTopDepartmentByCompany(departmentData.CompanyId) | ||
132 | + if err != nil { | ||
133 | + log.Error("获取公司一级部门数据失败:company_id=%d,err:%s", departmentData.CompanyId, err) | ||
134 | + return errors.New("获取公司一级部门数据失败") | ||
135 | + } | ||
136 | + } else { | ||
137 | + newParentDepart, err = models.GetDepartmentByBusinessId(data.ParentId) | ||
138 | + if err != nil { | ||
139 | + log.Error("获取父级数据失败,business_admin_id=%d,err:%s", data.ParentId, err) | ||
140 | + } | ||
141 | + } | ||
142 | + | ||
143 | + if departmentData.ParentId != newParentDepart.Id { | ||
144 | + //更新父级 | ||
145 | + err = departmentRelationUpdate(*departmentData, *newParentDepart) | ||
146 | + if err != nil { | ||
147 | + return err | ||
148 | + } | ||
149 | + } | ||
150 | + | ||
151 | + return nil | ||
152 | +} | ||
153 | + | ||
154 | +//positionRelationUpdate 处理职位上级发生变化的情况 | ||
155 | +func departmentRelationUpdate(departmentUpdate models.Department, newparent models.Department) error { | ||
156 | + const ( | ||
157 | + //获取某个职位的下级职位 锁数据 select ... for update | ||
158 | + dataSql0 string = `SELECT id,relation FROM department WHERE relation LIKE ? AND delete_at = 0 FOR UPDATE` | ||
159 | + //更新关系树 | ||
160 | + //dataSql2 string = `update department set relation=? where id=?` | ||
161 | + //更新departUpdate的parent_id | ||
162 | + //dataSql3 string = `update department set parent_id=? where id=?` | ||
163 | + ) | ||
164 | + var ( | ||
165 | + departmentSubset []*models.Department //子级部门 | ||
166 | + err error | ||
167 | + oldRelation string = departmentUpdate.Relation | ||
168 | + relationLike string = oldRelation + "%" | ||
169 | + newRelation string | ||
170 | + ) | ||
171 | + if newparent.Id == 0 { | ||
172 | + //修改节点为顶层节点的情况 | ||
173 | + newRelation = fmt.Sprintf(",%d,", departmentUpdate.Id) | ||
174 | + } else { | ||
175 | + newRelation = fmt.Sprintf("%s%d,", newparent.Relation, departmentUpdate.Id) | ||
176 | + } | ||
177 | + o := orm.NewOrm() | ||
178 | + o.Begin() | ||
179 | + //获取部门及子级部门的relation和id | ||
180 | + err = utils.ExecuteQueryAllWithOrmer(o, &departmentSubset, dataSql0, relationLike) | ||
181 | + if err != nil { | ||
182 | + e := fmt.Errorf("EXECUTE SQL err:%s", err) | ||
183 | + log.Error(e.Error()) | ||
184 | + return errors.New("获取部门及子级部门失败") | ||
185 | + } | ||
186 | + for i := range departmentSubset { | ||
187 | + if departmentSubset[i].Id == departmentUpdate.Id { | ||
188 | + departmentSubset[i].ParentId = newparent.Id | ||
189 | + } | ||
190 | + //重建关系树 | ||
191 | + s := strings.TrimLeft(departmentSubset[i].Relation, oldRelation) | ||
192 | + departmentSubset[i].Relation = fmt.Sprintf("%s%s", newRelation, s) | ||
193 | + departmentSubset[i].Level = setDepartmentLevel(departmentSubset[i].Relation) | ||
194 | + } | ||
195 | + | ||
196 | + //修改部门及子级部门的relation | ||
197 | + for i := range departmentSubset { | ||
198 | + err = models.UpdateDepartmentById(departmentSubset[i], []string{"ParentId", "Relation", "Level"}, o) | ||
199 | + if err != nil { | ||
200 | + log.Error("更新position发生错误,bussiness_admin_id=%d,id=%d,err:%s", departmentSubset[i].BusinessDepartmentId, departmentSubset[i].Id, err) | ||
201 | + o.Rollback() | ||
202 | + return fmt.Errorf("更新position发生错误,bussiness_admin_id=%d", departmentSubset[i].BusinessDepartmentId) | ||
203 | + } | ||
204 | + } | ||
205 | + o.Commit() | ||
206 | + return nil | ||
207 | +} | ||
208 | + | ||
209 | +func setDepartmentLevel(relation string) int { | ||
210 | + s := strings.Split(relation, ",") | ||
211 | + return len(s) - 3 | ||
212 | +} | ||
213 | + | ||
214 | +//AddDepartmentData ... | ||
215 | +func AddDepartmentData(data []ModuleDeparmentData) error { | ||
216 | + if len(data) == 0 { | ||
217 | + return nil | ||
218 | + } | ||
219 | + sort.Sort(SortDepartmentByLevel(data)) | ||
220 | + var ( | ||
221 | + err error | ||
222 | + companyData *models.Company | ||
223 | + topDepartment *models.Department | ||
224 | + ) | ||
225 | + companyData, err = models.GetCompanyByUCenter(data[0].CompanyId) | ||
226 | + if err != nil { | ||
227 | + log.Error("获取公司数据失败,user_center_id=%d,err:%s", data[0].CompanyId, err) | ||
228 | + return errors.New("获取公司数据失败") | ||
229 | + } | ||
230 | + topDepartment, err = models.GetTopDepartmentByCompany(companyData.Id) | ||
231 | + if err != nil { | ||
232 | + log.Error("获取公司一级部门数据失败;company_id=%d,err:%s", companyData.Id, err) | ||
233 | + return errors.New("获取公司一级部门数据失败") | ||
234 | + } | ||
235 | + o := orm.NewOrm() | ||
236 | + o.Begin() | ||
237 | + for _, v := range data { | ||
238 | + departmentData := &models.Department{ | ||
239 | + Id: v.Id, | ||
240 | + CompanyId: companyData.Id, | ||
241 | + Name: v.Name, | ||
242 | + Manages: "[]", | ||
243 | + BusinessDepartmentId: v.Id, | ||
244 | + DeleteAt: time.Unix(0, 0), | ||
245 | + CreateAt: time.Now(), | ||
246 | + Level: v.Level, | ||
247 | + } | ||
248 | + if v.ParentId > 0 { | ||
249 | + parentDepart := &models.Department{} | ||
250 | + err = o.QueryTable(&models.Department{}). | ||
251 | + Filter("business_department_id", v.ParentId). | ||
252 | + Filter("delete_at", 0). | ||
253 | + One(parentDepart) | ||
254 | + if err != nil { | ||
255 | + log.Error("获取父级职位数据失败,business_admin_id=%d,err:%s", v.ParentId, err) | ||
256 | + return errors.New("获取父级职位数据失败") | ||
257 | + } | ||
258 | + departmentData.ParentId = parentDepart.Id | ||
259 | + departmentData.SetRelation(parentDepart) | ||
260 | + } | ||
261 | + if v.ParentId == 0 { | ||
262 | + departmentData.ParentId = topDepartment.Id | ||
263 | + departmentData.SetRelation(topDepartment) | ||
264 | + } | ||
265 | + | ||
266 | + // departmentData.Level = setDepartmentLevel(departmentData.Relation) | ||
267 | + _, err = models.AddDepartment(departmentData, o) | ||
268 | + if err != nil { | ||
269 | + e := fmt.Errorf("存储部门数据失败,err:%s", err) | ||
270 | + o.Rollback() | ||
271 | + log.Error(e.Error()) | ||
272 | + return errors.New("存储部门数据失败") | ||
273 | + } | ||
274 | + } | ||
275 | + o.Commit() | ||
276 | + return nil | ||
277 | +} | ||
278 | + | ||
279 | +//DeleteDepartmentData ... | ||
280 | +func DeleteDepartmentData(ids []int64) error { | ||
281 | + o := orm.NewOrm() | ||
282 | + _, err := o.QueryTable(&models.Department{}). | ||
283 | + Filter("business_department_id__in", ids). | ||
284 | + Update(orm.Params{ | ||
285 | + "delete_at": time.Now().Format("2006-01-02 15:04:05"), | ||
286 | + }) | ||
287 | + if err != nil { | ||
288 | + log.Error("更新position数据失败,err:%s", err) | ||
289 | + return errors.New("删除职位数据失败") | ||
290 | + } | ||
291 | + return nil | ||
292 | +} |
-
请 注册 或 登录 后发表评论