正在显示
19 个修改的文件
包含
1325 行增加
和
178 行删除
@@ -29,9 +29,10 @@ | @@ -29,9 +29,10 @@ | ||
29 | |我审核的机会| | | v1/chance/chances| | 29 | |我审核的机会| | | v1/chance/chances| |
30 | |机会详情| | | v1/chance/detail| | 30 | |机会详情| | | v1/chance/detail| |
31 | |待抓住机会列表| | |v1/chance/chances| | 31 | |待抓住机会列表| | |v1/chance/chances| |
32 | -|提交机会| | |v1/chance/submit| | ||
33 | -|部门列表-全部| | |v1/department/departments| | ||
34 | -|部门列表-用户| | |v1/department/userDepartments| | 32 | +|机会类型|进行中| |v1/chance/chanceType| |
33 | +|模板列表|进行中| |v1/chance/templates| | ||
34 | +|提交机会|进行中| |v1/chance/submit| | ||
35 | +|部门列表|完成|2019.12.3|v1/department/departments| | ||
35 | |配置-机会类型| | |v1/config/chanceType| | 36 | |配置-机会类型| | |v1/config/chanceType| |
36 | |配置-评分| | |v1/config/score| | 37 | |配置-评分| | |v1/config/score| |
37 | |机会审核| | |v1/chance/audit| | 38 | |机会审核| | |v1/chance/audit| |
@@ -139,28 +139,90 @@ func (this *ChanceController) CommentDetailsMulti() { | @@ -139,28 +139,90 @@ func (this *ChanceController) CommentDetailsMulti() { | ||
139 | msg = protocol.NewReturnResponse(chance.CommentDetailsMulti(header, request)) | 139 | msg = protocol.NewReturnResponse(chance.CommentDetailsMulti(header, request)) |
140 | } | 140 | } |
141 | 141 | ||
142 | - | ||
143 | //SympathyAction | 142 | //SympathyAction |
144 | //@router /sympathyAction [post] | 143 | //@router /sympathyAction [post] |
145 | -func(this *ChanceController)SympathyAction(){ | 144 | +func (this *ChanceController) SympathyAction() { |
146 | var msg *protocol.ResponseMessage | 145 | var msg *protocol.ResponseMessage |
147 | defer func() { | 146 | defer func() { |
148 | this.Resp(msg) | 147 | this.Resp(msg) |
149 | }() | 148 | }() |
150 | var request *protocol.SympathyActionRequest | 149 | var request *protocol.SympathyActionRequest |
151 | - if err:=json.Unmarshal(this.ByteBody,&request);err!=nil{ | 150 | + if err := json.Unmarshal(this.ByteBody, &request); err != nil { |
152 | log.Error(err) | 151 | log.Error(err) |
153 | msg = protocol.BadRequestParam(1) | 152 | msg = protocol.BadRequestParam(1) |
154 | return | 153 | return |
155 | } | 154 | } |
156 | - if b,m :=this.Valid(request);!b{ | 155 | + if b, m := this.Valid(request); !b { |
157 | msg = m | 156 | msg = m |
158 | return | 157 | return |
159 | } | 158 | } |
160 | - if !(request.SourceType==protocol.SourceType_Chance || request.SourceType==protocol.SourceType_Comment){ | 159 | + if !(request.SourceType == protocol.SourceType_Chance || request.SourceType == protocol.SourceType_Comment) { |
161 | msg = protocol.BadRequestParam(2) | 160 | msg = protocol.BadRequestParam(2) |
162 | return | 161 | return |
163 | } | 162 | } |
164 | header := controllers.GetRequestHeader(this.Ctx) | 163 | header := controllers.GetRequestHeader(this.Ctx) |
165 | - msg = protocol.NewReturnResponse(chance.SympathyAction(header,request)) | 164 | + msg = protocol.NewReturnResponse(chance.SympathyAction(header, request)) |
165 | +} | ||
166 | + | ||
167 | +//ChanceType | ||
168 | +//@router /chanceType [post] | ||
169 | +func (this *ChanceController) ChanceType() { | ||
170 | + var msg *protocol.ResponseMessage | ||
171 | + defer func() { | ||
172 | + this.Resp(msg) | ||
173 | + }() | ||
174 | + var request *protocol.ChanceTypeRequest | ||
175 | + if err := json.Unmarshal(this.ByteBody, &request); err != nil { | ||
176 | + log.Error(err) | ||
177 | + msg = protocol.BadRequestParam(1) | ||
178 | + return | ||
179 | + } | ||
180 | + if b, m := this.Valid(request); !b { | ||
181 | + msg = m | ||
182 | + return | ||
183 | + } | ||
184 | + header := controllers.GetRequestHeader(this.Ctx) | ||
185 | + msg = protocol.NewReturnResponse(chance.ChanceType(header, request)) | ||
186 | +} | ||
187 | + | ||
188 | +//Templates | ||
189 | +//@router /templates [post] | ||
190 | +func (this *ChanceController) Templates() { | ||
191 | + var msg *protocol.ResponseMessage | ||
192 | + defer func() { | ||
193 | + this.Resp(msg) | ||
194 | + }() | ||
195 | + var request *protocol.TemplatesRequest | ||
196 | + if err := json.Unmarshal(this.ByteBody, &request); err != nil { | ||
197 | + log.Error(err) | ||
198 | + msg = protocol.BadRequestParam(1) | ||
199 | + return | ||
200 | + } | ||
201 | + if b, m := this.Valid(request); !b { | ||
202 | + msg = m | ||
203 | + return | ||
204 | + } | ||
205 | + header := controllers.GetRequestHeader(this.Ctx) | ||
206 | + msg = protocol.NewReturnResponse(chance.Templates(header, request)) | ||
207 | +} | ||
208 | + | ||
209 | +//ChanceSubmit | ||
210 | +//@router /chanceSubmit [post] | ||
211 | +func (this *ChanceController) ChanceSubmit() { | ||
212 | + var msg *protocol.ResponseMessage | ||
213 | + defer func() { | ||
214 | + this.Resp(msg) | ||
215 | + }() | ||
216 | + var request *protocol.ChanceSubmitRequest | ||
217 | + if err := json.Unmarshal(this.ByteBody, &request); err != nil { | ||
218 | + log.Error(err) | ||
219 | + msg = protocol.BadRequestParam(1) | ||
220 | + return | ||
221 | + } | ||
222 | + if b, m := this.Valid(request); !b { | ||
223 | + msg = m | ||
224 | + return | ||
225 | + } | ||
226 | + header := controllers.GetRequestHeader(this.Ctx) | ||
227 | + msg = protocol.NewReturnResponse(chance.ChanceSubmit(header, request)) | ||
166 | } | 228 | } |
models/audit_flow_config.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "time" | ||
6 | + | ||
7 | + "github.com/astaxie/beego/orm" | ||
8 | +) | ||
9 | + | ||
10 | +type AuditFlowConfig struct { | ||
11 | + Id int `orm:"column(id);pk" description:"唯一编号"` | ||
12 | + AuditTemplateId int64 `orm:"column(audit_template_id)" description:"表audit_template.id 所属审批模板编号"` | ||
13 | + AuditGroupId int64 `orm:"column(audit_group_id)" description:"审核组id (同一个审批批次)"` | ||
14 | + Level int `orm:"column(level)" description:"审批层级顺序,审批步骤 第几步"` | ||
15 | + AuditFlowType int `orm:"column(audit_flow_type)" description:"审核流类型 1.部门长 2.指定成员 3.指定角色 4.特殊审核人 "` | ||
16 | + FromSpecialUser string `orm:"column(from_special_user)" description:"特殊指定的审批单发起人"` | ||
17 | + ToRole string `orm:"column(to_role);null" description:"指定角色"` | ||
18 | + ToUser string `orm:"column(to_user);null" description:"指定人"` | ||
19 | + FlowType int `orm:"column(flow_type)" description:"审批类型 1:正常审核 2:特殊审核"` | ||
20 | + ActionType uint `orm:"column(action_type)" description:"审批执行方式【1:or】【2:and】"` | ||
21 | + CreateAt time.Time `orm:"column(create_at);type(timestamp)" description:"创建时间"` | ||
22 | + UpdateAt time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"` | ||
23 | +} | ||
24 | + | ||
25 | +func (t *AuditFlowConfig) TableName() string { | ||
26 | + return "audit_flow_config" | ||
27 | +} | ||
28 | + | ||
29 | +func init() { | ||
30 | + orm.RegisterModel(new(AuditFlowConfig)) | ||
31 | +} | ||
32 | + | ||
33 | +// AddAuditFlowConfig insert a new AuditFlowConfig into database and returns | ||
34 | +// last inserted Id on success. | ||
35 | +func AddAuditFlowConfig(m *AuditFlowConfig) (id int64, err error) { | ||
36 | + o := orm.NewOrm() | ||
37 | + id, err = o.Insert(m) | ||
38 | + return | ||
39 | +} | ||
40 | + | ||
41 | +// GetAuditFlowConfigById retrieves AuditFlowConfig by Id. Returns error if | ||
42 | +// Id doesn't exist | ||
43 | +func GetAuditFlowConfigById(id int) (v *AuditFlowConfig, err error) { | ||
44 | + o := orm.NewOrm() | ||
45 | + v = &AuditFlowConfig{Id: id} | ||
46 | + if err = o.Read(v); err == nil { | ||
47 | + return v, nil | ||
48 | + } | ||
49 | + return nil, err | ||
50 | +} | ||
51 | + | ||
52 | +// UpdateAuditFlowConfig updates AuditFlowConfig by Id and returns error if | ||
53 | +// the record to be updated doesn't exist | ||
54 | +func UpdateAuditFlowConfigById(m *AuditFlowConfig) (err error) { | ||
55 | + o := orm.NewOrm() | ||
56 | + v := AuditFlowConfig{Id: m.Id} | ||
57 | + // ascertain id exists in the database | ||
58 | + if err = o.Read(&v); err == nil { | ||
59 | + var num int64 | ||
60 | + if num, err = o.Update(m); err == nil { | ||
61 | + fmt.Println("Number of records updated in database:", num) | ||
62 | + } | ||
63 | + } | ||
64 | + return | ||
65 | +} | ||
66 | + | ||
67 | +// DeleteAuditFlowConfig deletes AuditFlowConfig by Id and returns error if | ||
68 | +// the record to be deleted doesn't exist | ||
69 | +func DeleteAuditFlowConfig(id int) (err error) { | ||
70 | + o := orm.NewOrm() | ||
71 | + v := AuditFlowConfig{Id: id} | ||
72 | + // ascertain id exists in the database | ||
73 | + if err = o.Read(&v); err == nil { | ||
74 | + var num int64 | ||
75 | + if num, err = o.Delete(&AuditFlowConfig{Id: id}); err == nil { | ||
76 | + fmt.Println("Number of records deleted in database:", num) | ||
77 | + } | ||
78 | + } | ||
79 | + return | ||
80 | +} | ||
81 | + | ||
82 | +func GetAuditFlowConfigs(auditTemplateId int64, groupId int64) (v []*AuditFlowConfig, err error) { | ||
83 | + o := orm.NewOrm() | ||
84 | + sql := "select * from audit_flow_config where audit_template_id=? and audit_group_id=? order by level" | ||
85 | + if _, err = o.Raw(sql, auditTemplateId, groupId).QueryRows(&v); err == nil { | ||
86 | + return | ||
87 | + } | ||
88 | + return | ||
89 | +} | ||
90 | + | ||
91 | +func GetAuditFlowConfigsLevel(auditTemplateId int64, level int) (v []*AuditFlowConfig, err error) { | ||
92 | + o := orm.NewOrm() | ||
93 | + sql := "select * from audit_flow_config where audit_template_id=? and level=?" | ||
94 | + if _, err = o.Raw(sql, auditTemplateId, level).QueryRows(&v); err == nil { | ||
95 | + return | ||
96 | + } | ||
97 | + return | ||
98 | +} |
models/audit_flow_process.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "time" | ||
6 | + | ||
7 | + "github.com/astaxie/beego/orm" | ||
8 | +) | ||
9 | + | ||
10 | +type AuditFlowProcess struct { | ||
11 | + Id int64 `orm:"column(id);pk" description:"唯一标识"` | ||
12 | + ChanceId int64 `orm:"column(chance_id)" description:"实例id,关联chance表id"` | ||
13 | + Uid int64 `orm:"column(uid)" description:"用户id(审批人)"` | ||
14 | + Level int `orm:"column(level)" description:"审批步骤"` | ||
15 | + IsActive int8 `orm:"column(is_active)" description:"是否激活"` | ||
16 | + ApproveTime time.Time `orm:"column(approve_time);type(timestamp)" description:"审批时间"` | ||
17 | + BasicSorce float64 `orm:"column(basic_sorce);null;digits(4);decimals(1)" description:"基础评分"` | ||
18 | + ExtraSorce float64 `orm:"column(extra_sorce);null;digits(4);decimals(1)" description:"附加评分"` | ||
19 | + ValueSorce float64 `orm:"column(value_sorce);null;digits(4);decimals(1)" description:"价值评分"` | ||
20 | + ReviewStatus int8 `orm:"column(review_status)" description:"审核状态 0:审核中 1:被退回 2:已通过 3.自动通过 "` | ||
21 | + AuditFlowType int `orm:"column(audit_flow_type)" description:"审核流类型 1.部门长 2.指定成员 3.指定角色 4.特殊审核人"` | ||
22 | + FlowType int `orm:"column(flow_type)" description:"审批类型 1:正常审核 2:特殊审核"` | ||
23 | + ActionType int `orm:"column(action_type)" description:"审批执行方式【1:or】【2:and】"` | ||
24 | + CreateAt time.Time `orm:"column(create_at);type(timestamp)" description:"创建时间"` | ||
25 | + UpdateAt time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"` | ||
26 | + EnableStatus int8 `orm:"column(enable_status)" description:"有效状态 0:无效 1:有效 (被驳回以后,未完成的审核置为无效)"` | ||
27 | +} | ||
28 | + | ||
29 | +func (t *AuditFlowProcess) TableName() string { | ||
30 | + return "audit_flow_process" | ||
31 | +} | ||
32 | + | ||
33 | +func init() { | ||
34 | + orm.RegisterModel(new(AuditFlowProcess)) | ||
35 | +} | ||
36 | + | ||
37 | +// AddAuditFlowProcess insert a new AuditFlowProcess into database and returns | ||
38 | +// last inserted Id on success. | ||
39 | +func AddAuditFlowProcess(m *AuditFlowProcess) (id int64, err error) { | ||
40 | + o := orm.NewOrm() | ||
41 | + id, err = o.Insert(m) | ||
42 | + return | ||
43 | +} | ||
44 | + | ||
45 | +// GetAuditFlowProcessById retrieves AuditFlowProcess by Id. Returns error if | ||
46 | +// Id doesn't exist | ||
47 | +func GetAuditFlowProcessById(id int64) (v *AuditFlowProcess, err error) { | ||
48 | + o := orm.NewOrm() | ||
49 | + v = &AuditFlowProcess{Id: id} | ||
50 | + if err = o.Read(v); err == nil { | ||
51 | + return v, nil | ||
52 | + } | ||
53 | + return nil, err | ||
54 | +} | ||
55 | + | ||
56 | +// UpdateAuditFlowProcess updates AuditFlowProcess by Id and returns error if | ||
57 | +// the record to be updated doesn't exist | ||
58 | +func UpdateAuditFlowProcessById(m *AuditFlowProcess) (err error) { | ||
59 | + o := orm.NewOrm() | ||
60 | + v := AuditFlowProcess{Id: m.Id} | ||
61 | + // ascertain id exists in the database | ||
62 | + if err = o.Read(&v); err == nil { | ||
63 | + var num int64 | ||
64 | + if num, err = o.Update(m); err == nil { | ||
65 | + fmt.Println("Number of records updated in database:", num) | ||
66 | + } | ||
67 | + } | ||
68 | + return | ||
69 | +} | ||
70 | + | ||
71 | +// DeleteAuditFlowProcess deletes AuditFlowProcess by Id and returns error if | ||
72 | +// the record to be deleted doesn't exist | ||
73 | +func DeleteAuditFlowProcess(id int64) (err error) { | ||
74 | + o := orm.NewOrm() | ||
75 | + v := AuditFlowProcess{Id: id} | ||
76 | + // ascertain id exists in the database | ||
77 | + if err = o.Read(&v); err == nil { | ||
78 | + var num int64 | ||
79 | + if num, err = o.Delete(&AuditFlowProcess{Id: id}); err == nil { | ||
80 | + fmt.Println("Number of records deleted in database:", num) | ||
81 | + } | ||
82 | + } | ||
83 | + return | ||
84 | +} |
models/audit_form.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "time" | ||
6 | + | ||
7 | + "github.com/astaxie/beego/orm" | ||
8 | +) | ||
9 | + | ||
10 | +type AuditForm struct { | ||
11 | + Id int `orm:"column(id);pk" description:"唯一编号"` | ||
12 | + CompanyId int `orm:"column(company_id)" description:"表company.id 公司编号"` | ||
13 | + AuditTemplateId int `orm:"column(audit_template_id)" description:"表audit_template.id 所属审批模板编号"` | ||
14 | + Section int8 `orm:"column(section)" description:"输入项所属的版块(1.基础,2.附加)"` | ||
15 | + SortNum int `orm:"column(sort_num)" description:"排序"` | ||
16 | + Label string `orm:"column(label);size(100)" description:"标题"` | ||
17 | + InputType string `orm:"column(input_type);size(50)" description:"输入类型"` | ||
18 | + ValueList string `orm:"column(value_list);size(255)" description:"可选值列表"` | ||
19 | + Required int8 `orm:"column(required)" description:"是否必填:【0:否】【1:是】"` | ||
20 | + CurrentValue string `orm:"column(current_value);size(255)" description:"实际填写的值"` | ||
21 | + Disable int8 `orm:"column(disable);null" description:"显示隐藏:【0:显示】【1:隐藏】"` | ||
22 | + Step string `orm:"column(step);size(30)" description:"步进,输入类型是range时生效 "` | ||
23 | + Placeholder string `orm:"column(placeholder);size(40)" description:"输入提示"` | ||
24 | + CreateAt time.Time `orm:"column(create_at);type(timestamp);auto_now_add" description:"创建时间"` | ||
25 | + DeleteAt time.Time `orm:"column(delete_at);type(timestamp)" description:"更新时间"` | ||
26 | + EnableStatus int8 `orm:"column(enable_status);null" description:"有效状态 0:无效 1:有效 "` | ||
27 | +} | ||
28 | + | ||
29 | +func (t *AuditForm) TableName() string { | ||
30 | + return "audit_form" | ||
31 | +} | ||
32 | + | ||
33 | +func init() { | ||
34 | + orm.RegisterModel(new(AuditForm)) | ||
35 | +} | ||
36 | + | ||
37 | +// AddAuditForm insert a new AuditForm into database and returns | ||
38 | +// last inserted Id on success. | ||
39 | +func AddAuditForm(m *AuditForm) (id int64, err error) { | ||
40 | + o := orm.NewOrm() | ||
41 | + id, err = o.Insert(m) | ||
42 | + return | ||
43 | +} | ||
44 | + | ||
45 | +// GetAuditFormById retrieves AuditForm by Id. Returns error if | ||
46 | +// Id doesn't exist | ||
47 | +func GetAuditFormById(id int) (v *AuditForm, err error) { | ||
48 | + o := orm.NewOrm() | ||
49 | + v = &AuditForm{Id: id} | ||
50 | + if err = o.Read(v); err == nil { | ||
51 | + return v, nil | ||
52 | + } | ||
53 | + return nil, err | ||
54 | +} | ||
55 | + | ||
56 | +// UpdateAuditForm updates AuditForm by Id and returns error if | ||
57 | +// the record to be updated doesn't exist | ||
58 | +func UpdateAuditFormById(m *AuditForm) (err error) { | ||
59 | + o := orm.NewOrm() | ||
60 | + v := AuditForm{Id: m.Id} | ||
61 | + // ascertain id exists in the database | ||
62 | + if err = o.Read(&v); err == nil { | ||
63 | + var num int64 | ||
64 | + if num, err = o.Update(m); err == nil { | ||
65 | + fmt.Println("Number of records updated in database:", num) | ||
66 | + } | ||
67 | + } | ||
68 | + return | ||
69 | +} | ||
70 | + | ||
71 | +// DeleteAuditForm deletes AuditForm by Id and returns error if | ||
72 | +// the record to be deleted doesn't exist | ||
73 | +func DeleteAuditForm(id int) (err error) { | ||
74 | + o := orm.NewOrm() | ||
75 | + v := AuditForm{Id: id} | ||
76 | + // ascertain id exists in the database | ||
77 | + if err = o.Read(&v); err == nil { | ||
78 | + var num int64 | ||
79 | + if num, err = o.Delete(&AuditForm{Id: id}); err == nil { | ||
80 | + fmt.Println("Number of records deleted in database:", num) | ||
81 | + } | ||
82 | + } | ||
83 | + return | ||
84 | +} | ||
85 | + | ||
86 | +func GetAuditForms(companyId int64, auditTemplateId int64) (v []*AuditForm, err error) { | ||
87 | + o := orm.NewOrm() | ||
88 | + sql := `select * from audit_form where company_id=? and audit_template_id=? and enable_status=1 | ||
89 | +order by section,sort_num | ||
90 | +` | ||
91 | + if _, err = o.Raw(sql, companyId, auditTemplateId).QueryRows(&v); err == nil { | ||
92 | + return | ||
93 | + } | ||
94 | + return | ||
95 | +} |
models/audit_template.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "time" | ||
6 | + | ||
7 | + "github.com/astaxie/beego/orm" | ||
8 | +) | ||
9 | + | ||
10 | +type AuditTemplate struct { | ||
11 | + Id int64 `orm:"column(id);pk" description:"唯一编号"` | ||
12 | + CompanyId int `orm:"column(company_id)" description:"公司id"` | ||
13 | + ChanceType int `orm:"column(chance_type)" description:"机会类型"` | ||
14 | + Name string `orm:"column(name);size(20)" description:"子分类名称"` | ||
15 | + Doc string `orm:"column(doc);size(255)" description:"说明"` | ||
16 | + Icon string `orm:"column(icon);size(255)" description:"图标"` | ||
17 | + NoticeType int8 `orm:"column(notice_type)" description:"通知方式"` | ||
18 | + NoApprover int8 `orm:"column(no_approver)" description:"审核人空时:【1:自动通过】【2:转交给管理员】"` | ||
19 | + SortNum int `orm:"column(sort_num)" description:"自定义排序编号"` | ||
20 | + VisibleType int8 `orm:"column(visible_type)" description:"可见范围 0:所有人 1:指定部门 "` | ||
21 | + EnableStatus int8 `orm:"column(enable_status)" description:"是否有效 1:有效 0:无效"` | ||
22 | + CreateAt time.Time `orm:"column(create_at);type(timestamp)" description:"创建时间"` | ||
23 | + UpdateAt time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"` | ||
24 | +} | ||
25 | + | ||
26 | +func (t *AuditTemplate) TableName() string { | ||
27 | + return "audit_template" | ||
28 | +} | ||
29 | + | ||
30 | +func init() { | ||
31 | + orm.RegisterModel(new(AuditTemplate)) | ||
32 | +} | ||
33 | + | ||
34 | +// AddAuditTemplate insert a new AuditTemplate into database and returns | ||
35 | +// last inserted Id on success. | ||
36 | +func AddAuditTemplate(m *AuditTemplate) (id int64, err error) { | ||
37 | + o := orm.NewOrm() | ||
38 | + id, err = o.Insert(m) | ||
39 | + return | ||
40 | +} | ||
41 | + | ||
42 | +// GetAuditTemplateById retrieves AuditTemplate by Id. Returns error if | ||
43 | +// Id doesn't exist | ||
44 | +func GetAuditTemplateById(id int64) (v *AuditTemplate, err error) { | ||
45 | + o := orm.NewOrm() | ||
46 | + v = &AuditTemplate{Id: id} | ||
47 | + if err = o.Read(v); err == nil { | ||
48 | + return v, nil | ||
49 | + } | ||
50 | + return nil, err | ||
51 | +} | ||
52 | + | ||
53 | +// UpdateAuditTemplate updates AuditTemplate by Id and returns error if | ||
54 | +// the record to be updated doesn't exist | ||
55 | +func UpdateAuditTemplateById(m *AuditTemplate) (err error) { | ||
56 | + o := orm.NewOrm() | ||
57 | + v := AuditTemplate{Id: m.Id} | ||
58 | + // ascertain id exists in the database | ||
59 | + if err = o.Read(&v); err == nil { | ||
60 | + var num int64 | ||
61 | + if num, err = o.Update(m); err == nil { | ||
62 | + fmt.Println("Number of records updated in database:", num) | ||
63 | + } | ||
64 | + } | ||
65 | + return | ||
66 | +} | ||
67 | + | ||
68 | +// DeleteAuditTemplate deletes AuditTemplate by Id and returns error if | ||
69 | +// the record to be deleted doesn't exist | ||
70 | +func DeleteAuditTemplate(id int64) (err error) { | ||
71 | + o := orm.NewOrm() | ||
72 | + v := AuditTemplate{Id: id} | ||
73 | + // ascertain id exists in the database | ||
74 | + if err = o.Read(&v); err == nil { | ||
75 | + var num int64 | ||
76 | + if num, err = o.Delete(&AuditTemplate{Id: id}); err == nil { | ||
77 | + fmt.Println("Number of records deleted in database:", num) | ||
78 | + } | ||
79 | + } | ||
80 | + return | ||
81 | +} | ||
82 | + | ||
83 | +func GetAuditTemplates(companyId int64, chanceType int) (v []*AuditTemplate, err error) { | ||
84 | + o := orm.NewOrm() | ||
85 | + sql := "select * from audit_template where company_id=? and chance_type=? and enable_status=1" | ||
86 | + if _, err = o.Raw(sql, companyId, chanceType).QueryRows(&v); err == nil { | ||
87 | + return | ||
88 | + } | ||
89 | + return | ||
90 | +} |
@@ -13,16 +13,26 @@ import ( | @@ -13,16 +13,26 @@ import ( | ||
13 | type Chance struct { | 13 | type Chance struct { |
14 | Id int64 `orm:"column(id);pk" description:"id 主键"` | 14 | Id int64 `orm:"column(id);pk" description:"id 主键"` |
15 | UserId int64 `orm:"column(user_id)" description:"表user.id 用户id"` | 15 | UserId int64 `orm:"column(user_id)" description:"表user.id 用户id"` |
16 | + CompanyId int64 `orm:"column(company_id)" description:"表company.id 公司id"` | ||
16 | DepartmentId int64 `orm:"column(department_id)" description:"表department.id 部门id"` | 17 | DepartmentId int64 `orm:"column(department_id)" description:"表department.id 部门id"` |
17 | - ChanceType int `orm:"column(chance_type)" description:"表cfg_chance_type.id 机会类型 1:产品 2:渠道 3.客户 4.区域 5.其他 "` | ||
18 | - Content string `orm:"column(content)" description:"内容"` | ||
19 | - ViewTotal int `orm:"column(view_total)" description:"浏览总数"` | 18 | + ChanceType int `orm:"column(chance_type)" description:"表chance_type.id 机会类型 "` |
19 | + AuditTemplateId int64 `orm:"column(audit_template_id)" description:"表audit_template.id 所属审批模板编号"` | ||
20 | + AuditTemplateConfig string `orm:"column(audit_template_config);size(255);null" description:"模板配置 (存旧的配置信息,对新改动的不影响)"` | ||
21 | + Content string `orm:"column(content)" description:"格式化后的文本内容"` | ||
22 | + SourceContent string `orm:"column(source_content)" description:"原始表单内容 json"` | ||
23 | + ViewTotal int `orm:"column(view_total)" description:"查看总数"` | ||
20 | CommentTotal int `orm:"column(comment_total)" description:"评论总数"` | 24 | CommentTotal int `orm:"column(comment_total)" description:"评论总数"` |
21 | ZanTotal int `orm:"column(zan_total)" description:"点赞总数"` | 25 | ZanTotal int `orm:"column(zan_total)" description:"点赞总数"` |
22 | - ReviewStatus int8 `orm:"column(review_status)" description:"审核状态 0:待审核 1:被退回 2:已通过 3:草稿箱"` | 26 | + ReviewStatus int8 `orm:"column(review_status)" description:"审核状态 0:待处理 1:待审核 2:被退回 3:已通过 "` |
23 | EnableStatus int8 `orm:"column(enable_status)" description:"有效状态 0:无效 1:有效 "` | 27 | EnableStatus int8 `orm:"column(enable_status)" description:"有效状态 0:无效 1:有效 "` |
24 | UpdateAt time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"` | 28 | UpdateAt time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"` |
25 | CreateAt time.Time `orm:"column(create_at);type(timestamp)" description:"创建时间"` | 29 | CreateAt time.Time `orm:"column(create_at);type(timestamp)" description:"创建时间"` |
30 | + BasicSorce float64 `orm:"column(basic_sorce);null;digits(4);decimals(1)" description:"基础评分"` | ||
31 | + ExtraSorce float64 `orm:"column(extra_sorce);null;digits(4);decimals(1)" description:"附加评分"` | ||
32 | + ValueSorce float64 `orm:"column(value_sorce);null;digits(4);decimals(1)" description:"价值评分"` | ||
33 | + DiscoverySorce float64 `orm:"column(discovery_sorce);null;digits(4);decimals(1)" description:"发现得分(发现得分=基础评分*系数 + 附加评分*系数 + 价值评分*系数)"` | ||
34 | + PublishStatus int `orm:"column(publish_status)" description:"公开状态 0未公开、1部门公开、2公司公开"` | ||
35 | + AuditLevel int `orm:"column(audit_level)" description:"当前审批步骤"` | ||
26 | } | 36 | } |
27 | 37 | ||
28 | func (t *Chance) TableName() string { | 38 | func (t *Chance) TableName() string { |
models/chance_image.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "time" | ||
6 | + | ||
7 | + "github.com/astaxie/beego/orm" | ||
8 | +) | ||
9 | + | ||
10 | +type ChanceImage struct { | ||
11 | + Id int64 `orm:"column(id);auto" description:"唯一编号"` | ||
12 | + ChanceId int64 `orm:"column(chance_id);null" description:"表chance.id 机会编号"` | ||
13 | + Path string `orm:"column(path);size(500)" description:"路径"` | ||
14 | + W int `orm:"column(w);null" description:"宽"` | ||
15 | + H int `orm:"column(h);null" description:"高"` | ||
16 | + CreateAt time.Time `orm:"column(create_at);type(timestamp)" description:"创建时间"` | ||
17 | +} | ||
18 | + | ||
19 | +func (t *ChanceImage) TableName() string { | ||
20 | + return "chance_image" | ||
21 | +} | ||
22 | + | ||
23 | +func init() { | ||
24 | + orm.RegisterModel(new(ChanceImage)) | ||
25 | +} | ||
26 | + | ||
27 | +// AddChanceImage insert a new ChanceImage into database and returns | ||
28 | +// last inserted Id on success. | ||
29 | +func AddChanceImage(m *ChanceImage) (id int64, err error) { | ||
30 | + o := orm.NewOrm() | ||
31 | + id, err = o.Insert(m) | ||
32 | + return | ||
33 | +} | ||
34 | + | ||
35 | +// GetChanceImageById retrieves ChanceImage by Id. Returns error if | ||
36 | +// Id doesn't exist | ||
37 | +func GetChanceImageById(id int64) (v *ChanceImage, err error) { | ||
38 | + o := orm.NewOrm() | ||
39 | + v = &ChanceImage{Id: id} | ||
40 | + if err = o.Read(v); err == nil { | ||
41 | + return v, nil | ||
42 | + } | ||
43 | + return nil, err | ||
44 | +} | ||
45 | + | ||
46 | +// UpdateChanceImage updates ChanceImage by Id and returns error if | ||
47 | +// the record to be updated doesn't exist | ||
48 | +func UpdateChanceImageById(m *ChanceImage) (err error) { | ||
49 | + o := orm.NewOrm() | ||
50 | + v := ChanceImage{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 | +// DeleteChanceImage deletes ChanceImage by Id and returns error if | ||
62 | +// the record to be deleted doesn't exist | ||
63 | +func DeleteChanceImage(id int64) (err error) { | ||
64 | + o := orm.NewOrm() | ||
65 | + v := ChanceImage{Id: id} | ||
66 | + // ascertain id exists in the database | ||
67 | + if err = o.Read(&v); err == nil { | ||
68 | + var num int64 | ||
69 | + if num, err = o.Delete(&ChanceImage{Id: id}); err == nil { | ||
70 | + fmt.Println("Number of records deleted in database:", num) | ||
71 | + } | ||
72 | + } | ||
73 | + return | ||
74 | +} |
models/chance_speech.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "time" | ||
6 | + | ||
7 | + "github.com/astaxie/beego/orm" | ||
8 | +) | ||
9 | + | ||
10 | +type ChanceSpeech struct { | ||
11 | + Id int64 `orm:"column(id);pk" description:"唯一编号"` | ||
12 | + Duration int `orm:"column(duration);null" description:"秒数"` | ||
13 | + ChanceId int64 `orm:"column(chance_id);null" description:"表chance.id 机会编号"` | ||
14 | + Path string `orm:"column(path);size(500);null" description:"语音路径"` | ||
15 | + CreateAt time.Time `orm:"column(create_at);type(timestamp)"` | ||
16 | +} | ||
17 | + | ||
18 | +func (t *ChanceSpeech) TableName() string { | ||
19 | + return "chance_speech" | ||
20 | +} | ||
21 | + | ||
22 | +func init() { | ||
23 | + orm.RegisterModel(new(ChanceSpeech)) | ||
24 | +} | ||
25 | + | ||
26 | +// AddChanceSpeech insert a new ChanceSpeech into database and returns | ||
27 | +// last inserted Id on success. | ||
28 | +func AddChanceSpeech(m *ChanceSpeech) (id int64, err error) { | ||
29 | + o := orm.NewOrm() | ||
30 | + id, err = o.Insert(m) | ||
31 | + return | ||
32 | +} | ||
33 | + | ||
34 | +// GetChanceSpeechById retrieves ChanceSpeech by Id. Returns error if | ||
35 | +// Id doesn't exist | ||
36 | +func GetChanceSpeechById(id int64) (v *ChanceSpeech, err error) { | ||
37 | + o := orm.NewOrm() | ||
38 | + v = &ChanceSpeech{Id: id} | ||
39 | + if err = o.Read(v); err == nil { | ||
40 | + return v, nil | ||
41 | + } | ||
42 | + return nil, err | ||
43 | +} | ||
44 | + | ||
45 | +// UpdateChanceSpeech updates ChanceSpeech by Id and returns error if | ||
46 | +// the record to be updated doesn't exist | ||
47 | +func UpdateChanceSpeechById(m *ChanceSpeech) (err error) { | ||
48 | + o := orm.NewOrm() | ||
49 | + v := ChanceSpeech{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 | +// DeleteChanceSpeech deletes ChanceSpeech by Id and returns error if | ||
61 | +// the record to be deleted doesn't exist | ||
62 | +func DeleteChanceSpeech(id int64) (err error) { | ||
63 | + o := orm.NewOrm() | ||
64 | + v := ChanceSpeech{Id: id} | ||
65 | + // ascertain id exists in the database | ||
66 | + if err = o.Read(&v); err == nil { | ||
67 | + var num int64 | ||
68 | + if num, err = o.Delete(&ChanceSpeech{Id: id}); err == nil { | ||
69 | + fmt.Println("Number of records deleted in database:", num) | ||
70 | + } | ||
71 | + } | ||
72 | + return | ||
73 | +} |
models/chance_type.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "github.com/astaxie/beego/orm" | ||
6 | +) | ||
7 | + | ||
8 | +type ChanceType struct { | ||
9 | + Id int `orm:"column(id);auto" json:"id"` | ||
10 | + Name string `orm:"column(name);size(50)" description:"机会类型名称" json:"name"` | ||
11 | + Icon string `orm:"column(icon);size(500);null" description:"图标地址" json:"icon"` | ||
12 | +} | ||
13 | + | ||
14 | +func (t *ChanceType) TableName() string { | ||
15 | + return "chance_type" | ||
16 | +} | ||
17 | + | ||
18 | +func init() { | ||
19 | + orm.RegisterModel(new(ChanceType)) | ||
20 | +} | ||
21 | + | ||
22 | +// AddChanceType insert a new ChanceType into database and returns | ||
23 | +// last inserted Id on success. | ||
24 | +func AddChanceType(m *ChanceType) (id int64, err error) { | ||
25 | + o := orm.NewOrm() | ||
26 | + id, err = o.Insert(m) | ||
27 | + return | ||
28 | +} | ||
29 | + | ||
30 | +// GetChanceTypeById retrieves ChanceType by Id. Returns error if | ||
31 | +// Id doesn't exist | ||
32 | +func GetChanceTypeById(id int) (v *ChanceType, err error) { | ||
33 | + o := orm.NewOrm() | ||
34 | + v = &ChanceType{Id: id} | ||
35 | + if err = o.Read(v); err == nil { | ||
36 | + return v, nil | ||
37 | + } | ||
38 | + return nil, err | ||
39 | +} | ||
40 | + | ||
41 | +// UpdateChanceType updates ChanceType by Id and returns error if | ||
42 | +// the record to be updated doesn't exist | ||
43 | +func UpdateChanceTypeById(m *ChanceType) (err error) { | ||
44 | + o := orm.NewOrm() | ||
45 | + v := ChanceType{Id: m.Id} | ||
46 | + // ascertain id exists in the database | ||
47 | + if err = o.Read(&v); err == nil { | ||
48 | + var num int64 | ||
49 | + if num, err = o.Update(m); err == nil { | ||
50 | + fmt.Println("Number of records updated in database:", num) | ||
51 | + } | ||
52 | + } | ||
53 | + return | ||
54 | +} | ||
55 | + | ||
56 | +// DeleteChanceType deletes ChanceType by Id and returns error if | ||
57 | +// the record to be deleted doesn't exist | ||
58 | +func DeleteChanceType(id int) (err error) { | ||
59 | + o := orm.NewOrm() | ||
60 | + v := ChanceType{Id: id} | ||
61 | + // ascertain id exists in the database | ||
62 | + if err = o.Read(&v); err == nil { | ||
63 | + var num int64 | ||
64 | + if num, err = o.Delete(&ChanceType{Id: id}); err == nil { | ||
65 | + fmt.Println("Number of records deleted in database:", num) | ||
66 | + } | ||
67 | + } | ||
68 | + return | ||
69 | +} | ||
70 | + | ||
71 | +func GetChanceTypeAll() (v []*ChanceType, err error) { | ||
72 | + o := orm.NewOrm() | ||
73 | + sql := "select * from chance_type " | ||
74 | + if _, err = o.Raw(sql).QueryRows(&v); err == nil { | ||
75 | + return | ||
76 | + } | ||
77 | + return | ||
78 | +} |
models/chance_video.go
0 → 100644
1 | +package models | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "time" | ||
6 | + | ||
7 | + "github.com/astaxie/beego/orm" | ||
8 | +) | ||
9 | + | ||
10 | +type ChanceVideo struct { | ||
11 | + Id int64 `orm:"column(id);auto"` | ||
12 | + ChanceId int64 `orm:"column(chance_id);null" description:"表chance.id 机会id"` | ||
13 | + Path string `orm:"column(path);size(500);null" description:"路径"` | ||
14 | + Cover string `orm:"column(cover);size(500);null" description:"封面"` | ||
15 | + CreateAt time.Time `orm:"column(create_at);type(timestamp)"` | ||
16 | +} | ||
17 | + | ||
18 | +func (t *ChanceVideo) TableName() string { | ||
19 | + return "chance_video" | ||
20 | +} | ||
21 | + | ||
22 | +func init() { | ||
23 | + orm.RegisterModel(new(ChanceVideo)) | ||
24 | +} | ||
25 | + | ||
26 | +// AddChanceVideo insert a new ChanceVideo into database and returns | ||
27 | +// last inserted Id on success. | ||
28 | +func AddChanceVideo(m *ChanceVideo) (id int64, err error) { | ||
29 | + o := orm.NewOrm() | ||
30 | + id, err = o.Insert(m) | ||
31 | + return | ||
32 | +} | ||
33 | + | ||
34 | +// GetChanceVideoById retrieves ChanceVideo by Id. Returns error if | ||
35 | +// Id doesn't exist | ||
36 | +func GetChanceVideoById(id int64) (v *ChanceVideo, err error) { | ||
37 | + o := orm.NewOrm() | ||
38 | + v = &ChanceVideo{Id: id} | ||
39 | + if err = o.Read(v); err == nil { | ||
40 | + return v, nil | ||
41 | + } | ||
42 | + return nil, err | ||
43 | +} | ||
44 | + | ||
45 | +// UpdateChanceVideo updates ChanceVideo by Id and returns error if | ||
46 | +// the record to be updated doesn't exist | ||
47 | +func UpdateChanceVideoById(m *ChanceVideo) (err error) { | ||
48 | + o := orm.NewOrm() | ||
49 | + v := ChanceVideo{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 | +// DeleteChanceVideo deletes ChanceVideo by Id and returns error if | ||
61 | +// the record to be deleted doesn't exist | ||
62 | +func DeleteChanceVideo(id int64) (err error) { | ||
63 | + o := orm.NewOrm() | ||
64 | + v := ChanceVideo{Id: id} | ||
65 | + // ascertain id exists in the database | ||
66 | + if err = o.Read(&v); err == nil { | ||
67 | + var num int64 | ||
68 | + if num, err = o.Delete(&ChanceVideo{Id: id}); err == nil { | ||
69 | + fmt.Println("Number of records deleted in database:", num) | ||
70 | + } | ||
71 | + } | ||
72 | + return | ||
73 | +} |
@@ -73,14 +73,13 @@ func DeleteUserDepartment(id int64) (err error) { | @@ -73,14 +73,13 @@ func DeleteUserDepartment(id int64) (err error) { | ||
73 | return | 73 | return |
74 | } | 74 | } |
75 | 75 | ||
76 | - | ||
77 | func GetUserDepartments(userId int64, companyId int64, v interface{}) (err error) { | 76 | func GetUserDepartments(userId int64, companyId int64, v interface{}) (err error) { |
78 | o := orm.NewOrm() | 77 | o := orm.NewOrm() |
79 | sql := ` | 78 | sql := ` |
80 | -select a.department_id,b.name | 79 | +select a.department_id,b.name,b.parent_id,b.managers |
81 | from user_department a INNER JOIN department b on a.department_id = b.id | 80 | from user_department a INNER JOIN department b on a.department_id = b.id |
82 | where a.user_id =? and a.company_id =? and enable_status =1 and b.delete_at =0` | 81 | where a.user_id =? and a.company_id =? and enable_status =1 and b.delete_at =0` |
83 | - if _, err = o.Raw(sql,userId, companyId).QueryRows(v); err == nil { | 82 | + if _, err = o.Raw(sql, userId, companyId).QueryRows(v); err == nil { |
84 | return | 83 | return |
85 | } | 84 | } |
86 | return | 85 | return |
1 | package models | 1 | package models |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | - "errors" | ||
5 | "fmt" | 4 | "fmt" |
6 | - "reflect" | ||
7 | - "strings" | ||
8 | "time" | 5 | "time" |
9 | 6 | ||
10 | "github.com/astaxie/beego/orm" | 7 | "github.com/astaxie/beego/orm" |
@@ -54,84 +51,6 @@ func GetUsersById(id int64) (v *User, err error) { | @@ -54,84 +51,6 @@ func GetUsersById(id int64) (v *User, err error) { | ||
54 | return nil, err | 51 | return nil, err |
55 | } | 52 | } |
56 | 53 | ||
57 | -// GetAllUsers retrieves all Users matches certain condition. Returns empty list if | ||
58 | -// no records exist | ||
59 | -func GetAllUser(query map[string]string, fields []string, sortby []string, order []string, | ||
60 | - offset int64, limit int64) (ml []interface{}, err error) { | ||
61 | - o := orm.NewOrm() | ||
62 | - qs := o.QueryTable(new(User)) | ||
63 | - // query k=v | ||
64 | - for k, v := range query { | ||
65 | - // rewrite dot-notation to Object__Attribute | ||
66 | - k = strings.Replace(k, ".", "__", -1) | ||
67 | - if strings.Contains(k, "isnull") { | ||
68 | - qs = qs.Filter(k, (v == "true" || v == "1")) | ||
69 | - } else { | ||
70 | - qs = qs.Filter(k, v) | ||
71 | - } | ||
72 | - } | ||
73 | - // order by: | ||
74 | - var sortFields []string | ||
75 | - if len(sortby) != 0 { | ||
76 | - if len(sortby) == len(order) { | ||
77 | - // 1) for each sort field, there is an associated order | ||
78 | - for i, v := range sortby { | ||
79 | - orderby := "" | ||
80 | - if order[i] == "desc" { | ||
81 | - orderby = "-" + v | ||
82 | - } else if order[i] == "asc" { | ||
83 | - orderby = v | ||
84 | - } else { | ||
85 | - return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
86 | - } | ||
87 | - sortFields = append(sortFields, orderby) | ||
88 | - } | ||
89 | - qs = qs.OrderBy(sortFields...) | ||
90 | - } else if len(sortby) != len(order) && len(order) == 1 { | ||
91 | - // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
92 | - for _, v := range sortby { | ||
93 | - orderby := "" | ||
94 | - if order[0] == "desc" { | ||
95 | - orderby = "-" + v | ||
96 | - } else if order[0] == "asc" { | ||
97 | - orderby = v | ||
98 | - } else { | ||
99 | - return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
100 | - } | ||
101 | - sortFields = append(sortFields, orderby) | ||
102 | - } | ||
103 | - } else if len(sortby) != len(order) && len(order) != 1 { | ||
104 | - return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
105 | - } | ||
106 | - } else { | ||
107 | - if len(order) != 0 { | ||
108 | - return nil, errors.New("Error: unused 'order' fields") | ||
109 | - } | ||
110 | - } | ||
111 | - | ||
112 | - var l []User | ||
113 | - qs = qs.OrderBy(sortFields...) | ||
114 | - if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
115 | - if len(fields) == 0 { | ||
116 | - for _, v := range l { | ||
117 | - ml = append(ml, v) | ||
118 | - } | ||
119 | - } else { | ||
120 | - // trim unused fields | ||
121 | - for _, v := range l { | ||
122 | - m := make(map[string]interface{}) | ||
123 | - val := reflect.ValueOf(v) | ||
124 | - for _, fname := range fields { | ||
125 | - m[fname] = val.FieldByName(fname).Interface() | ||
126 | - } | ||
127 | - ml = append(ml, m) | ||
128 | - } | ||
129 | - } | ||
130 | - return ml, nil | ||
131 | - } | ||
132 | - return nil, err | ||
133 | -} | ||
134 | - | ||
135 | // UpdateUsers updates Users by Id and returns error if | 54 | // UpdateUsers updates Users by Id and returns error if |
136 | // the record to be updated doesn't exist | 55 | // the record to be updated doesn't exist |
137 | func UpdateUsersById(m *User) (err error) { | 56 | func UpdateUsersById(m *User) (err error) { |
@@ -179,3 +98,12 @@ func GetUserByMobile(mobile string) (v *User, err error) { | @@ -179,3 +98,12 @@ func GetUserByMobile(mobile string) (v *User, err error) { | ||
179 | } | 98 | } |
180 | return nil, err | 99 | return nil, err |
181 | } | 100 | } |
101 | + | ||
102 | +func GetUserByRole(roleId int) (v []*User, err error) { | ||
103 | + o := orm.NewOrm() | ||
104 | + sql := `select * from user where is_kefu = 1 and enable_status=1` | ||
105 | + if _, err = o.Raw(sql).QueryRows(&v); err == nil { | ||
106 | + return v, nil | ||
107 | + } | ||
108 | + return nil, err | ||
109 | +} |
1 | package protocol | 1 | package protocol |
2 | 2 | ||
3 | +import "opp/models" | ||
4 | + | ||
3 | const ( | 5 | const ( |
4 | MarkFlag_Zan = 1 | 6 | MarkFlag_Zan = 1 |
5 | MarkFlag_Collect = 2 | 7 | MarkFlag_Collect = 2 |
6 | ) | 8 | ) |
7 | 9 | ||
8 | -const( | ||
9 | - UnMarkFlag =0 | 10 | +const ( |
11 | + UnMarkFlag = 0 | ||
10 | MarkFlag = 1 //是否标记 /点赞 /收藏 | 12 | MarkFlag = 1 //是否标记 /点赞 /收藏 |
11 | ) | 13 | ) |
12 | 14 | ||
15 | +const ( | ||
16 | + AuditFlowType_Departmentor = iota + 1 //部门长 | ||
17 | + AuditFlowType_User //指定用户 | ||
18 | + AuditFlowType_Role //指定角色 | ||
19 | + AuditFlowType_SpecailUser //特殊人员 | ||
20 | +) | ||
21 | + | ||
22 | +const ( | ||
23 | + FlowType_Normal = iota + 1 | ||
24 | + FlowType_Specail | ||
25 | +) | ||
26 | + | ||
27 | +const ( | ||
28 | + NoApprover_Pass = 1 | ||
29 | + NoApprover_ToAdmin = 2 | ||
30 | +) | ||
31 | + | ||
32 | +const ( | ||
33 | + StaticType_Question = 1 << iota | ||
34 | + StaticType_Question2 | ||
35 | +) | ||
36 | + | ||
13 | /*Favorite */ | 37 | /*Favorite */ |
14 | type FavoriteRequest struct { | 38 | type FavoriteRequest struct { |
15 | ObjectType int `json:"object_type" valid:"Required"` //收藏 点赞 | 39 | ObjectType int `json:"object_type" valid:"Required"` //收藏 点赞 |
@@ -28,7 +52,7 @@ type ChanceFavorite struct { | @@ -28,7 +52,7 @@ type ChanceFavorite struct { | ||
28 | Favorite interface{} `json:"favorite"` | 52 | Favorite interface{} `json:"favorite"` |
29 | } | 53 | } |
30 | 54 | ||
31 | -type Chance struct { | 55 | +type ChanceDetail struct { |
32 | Id int64 `json:"id"` | 56 | Id int64 `json:"id"` |
33 | Provider *BaseUserInfo `json:"provider"` | 57 | Provider *BaseUserInfo `json:"provider"` |
34 | IsCollect bool `json:"is_collect"` | 58 | IsCollect bool `json:"is_collect"` |
@@ -45,7 +69,6 @@ type Chance struct { | @@ -45,7 +69,6 @@ type Chance struct { | ||
45 | ZanTotal int `json:"zan_total"` | 69 | ZanTotal int `json:"zan_total"` |
46 | } | 70 | } |
47 | 71 | ||
48 | - | ||
49 | /*SympathyAction */ | 72 | /*SympathyAction */ |
50 | type SympathyActionRequest struct { | 73 | type SympathyActionRequest struct { |
51 | MarkType int `json:"mark_type" valid:"Required"` // 1.赞 2.收藏 | 74 | MarkType int `json:"mark_type" valid:"Required"` // 1.赞 2.收藏 |
@@ -55,3 +78,67 @@ type SympathyActionRequest struct { | @@ -55,3 +78,67 @@ type SympathyActionRequest struct { | ||
55 | } | 78 | } |
56 | type SympathyActionResponse struct { | 79 | type SympathyActionResponse struct { |
57 | } | 80 | } |
81 | + | ||
82 | +/*ChanceType */ | ||
83 | +type ChanceTypeRequest struct { | ||
84 | +} | ||
85 | +type ChanceTypeResponse struct { | ||
86 | + List []*models.ChanceType `json:"list"` | ||
87 | +} | ||
88 | + | ||
89 | +/*Templates */ | ||
90 | +type TemplatesRequest struct { | ||
91 | + ChanceType int `json:"chance_type" valid:"Required"` | ||
92 | +} | ||
93 | +type TemplatesResponse struct { | ||
94 | + Templates []*Template `json:"list"` | ||
95 | +} | ||
96 | + | ||
97 | +type Template struct { | ||
98 | + Id int64 `json:"id"` | ||
99 | + Name string `json:"name"` | ||
100 | + Doc string `json:"doc"` | ||
101 | + Icon string `json:"icon"` | ||
102 | + FormList []*Form `json:"form_list"` | ||
103 | +} | ||
104 | + | ||
105 | +type Form struct { | ||
106 | + Id int `json:"id"` | ||
107 | + Lable string `json:"name"` | ||
108 | + InputType string `json:"input_type"` | ||
109 | + SectionType int8 `json:"section_type"` | ||
110 | + Value string `json:"value"` | ||
111 | + Required int8 `json:"required"` | ||
112 | +} | ||
113 | + | ||
114 | +type ChanceSubmitRequest struct { | ||
115 | + AuditTemplateId int64 `json:"audit_template_id" valid:"Required"` | ||
116 | + Content string `json:"content" valid:"Required"` | ||
117 | + FormList []*Form `json:"form_list" valid:"Required"` | ||
118 | + Speechs []Speech `json:"speechs"` | ||
119 | + Pictures []Picture `json:"pictures"` | ||
120 | + Videos []Video `json:"videos"` | ||
121 | + RelatedDepartment int64 `json:"related_departments" valid:"Required"` | ||
122 | +} | ||
123 | + | ||
124 | +type ChanceSubmitResponse struct { | ||
125 | +} | ||
126 | + | ||
127 | +type Speech struct { | ||
128 | + Path string `json:"path"` | ||
129 | + Duration int `json:"duration"` | ||
130 | +} | ||
131 | +type Picture struct { | ||
132 | + Path string `json:"path"` | ||
133 | + W int `json:"w"` | ||
134 | + H int `json:"h"` | ||
135 | +} | ||
136 | +type Video struct { | ||
137 | + Path string `json:"path"` | ||
138 | + Cover string `json:"cover"` //封面 | ||
139 | + Duration int `json:"duration"` | ||
140 | +} | ||
141 | + | ||
142 | +type AuditConfig struct { | ||
143 | + NoApprover int8 `json:"no_approver"` //审核人空时:【1:自动通过】【2:转交给管理员】 | ||
144 | +} |
@@ -14,8 +14,10 @@ type DepartmentsResponse struct { | @@ -14,8 +14,10 @@ type DepartmentsResponse struct { | ||
14 | } | 14 | } |
15 | 15 | ||
16 | type Department struct { | 16 | type Department struct { |
17 | - DepartmentId int `orm:"column(department_id) json:"id"` | ||
18 | - Name string `orm:"column(name) json:"name"` | ||
19 | - PId int `orm:"column(pid) json:"-"` | 17 | + DepartmentId int `orm:"column(department_id)" json:"id"` |
18 | + Name string `orm:"column(name)" json:"name"` | ||
19 | + PId int `orm:"column(parent_id)" json:"-"` | ||
20 | + ManagerString string `orm:"column(managers)" json:"-"` | ||
21 | + Managers []int `json:"-"` | ||
20 | Departments []*Department `json:"departments,omitempty"` | 22 | Departments []*Department `json:"departments,omitempty"` |
21 | } | 23 | } |
@@ -57,6 +57,22 @@ func init() { | @@ -57,6 +57,22 @@ func init() { | ||
57 | 57 | ||
58 | beego.GlobalControllerRouter["opp/controllers/v1:ChanceController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:ChanceController"], | 58 | beego.GlobalControllerRouter["opp/controllers/v1:ChanceController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:ChanceController"], |
59 | beego.ControllerComments{ | 59 | beego.ControllerComments{ |
60 | + Method: "ChanceSubmit", | ||
61 | + Router: `/chanceSubmit`, | ||
62 | + AllowHTTPMethods: []string{"post"}, | ||
63 | + MethodParams: param.Make(), | ||
64 | + Params: nil}) | ||
65 | + | ||
66 | + beego.GlobalControllerRouter["opp/controllers/v1:ChanceController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:ChanceController"], | ||
67 | + beego.ControllerComments{ | ||
68 | + Method: "ChanceType", | ||
69 | + Router: `/chanceType`, | ||
70 | + AllowHTTPMethods: []string{"post"}, | ||
71 | + MethodParams: param.Make(), | ||
72 | + Params: nil}) | ||
73 | + | ||
74 | + beego.GlobalControllerRouter["opp/controllers/v1:ChanceController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:ChanceController"], | ||
75 | + beego.ControllerComments{ | ||
60 | Method: "CommentDetailsMulti", | 76 | Method: "CommentDetailsMulti", |
61 | Router: `/commentDetailsMulti`, | 77 | Router: `/commentDetailsMulti`, |
62 | AllowHTTPMethods: []string{"post"}, | 78 | AllowHTTPMethods: []string{"post"}, |
@@ -111,6 +127,14 @@ func init() { | @@ -111,6 +127,14 @@ func init() { | ||
111 | MethodParams: param.Make(), | 127 | MethodParams: param.Make(), |
112 | Params: nil}) | 128 | Params: nil}) |
113 | 129 | ||
130 | + beego.GlobalControllerRouter["opp/controllers/v1:ChanceController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:ChanceController"], | ||
131 | + beego.ControllerComments{ | ||
132 | + Method: "Templates", | ||
133 | + Router: `/templates`, | ||
134 | + AllowHTTPMethods: []string{"post"}, | ||
135 | + MethodParams: param.Make(), | ||
136 | + Params: nil}) | ||
137 | + | ||
114 | beego.GlobalControllerRouter["opp/controllers/v1:CommendController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:CommendController"], | 138 | beego.GlobalControllerRouter["opp/controllers/v1:CommendController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:CommendController"], |
115 | beego.ControllerComments{ | 139 | beego.ControllerComments{ |
116 | Method: "Company", | 140 | Method: "Company", |
@@ -67,7 +67,7 @@ func GetUserBaseInfo(uid int64, companyId int64) (v *protocol.BaseUserInfo, err | @@ -67,7 +67,7 @@ func GetUserBaseInfo(uid int64, companyId int64) (v *protocol.BaseUserInfo, err | ||
67 | return | 67 | return |
68 | } | 68 | } |
69 | 69 | ||
70 | -func GetChance(chanceId int64, companyId int64) (v *protocol.Chance, err error) { | 70 | +func GetChance(chanceId int64, companyId int64) (v *protocol.ChanceDetail, err error) { |
71 | var ( | 71 | var ( |
72 | c *models.Chance | 72 | c *models.Chance |
73 | baseUserInfo *protocol.BaseUserInfo | 73 | baseUserInfo *protocol.BaseUserInfo |
@@ -79,7 +79,7 @@ func GetChance(chanceId int64, companyId int64) (v *protocol.Chance, err error) | @@ -79,7 +79,7 @@ func GetChance(chanceId int64, companyId int64) (v *protocol.Chance, err error) | ||
79 | if baseUserInfo, err = GetUserBaseInfo(c.UserId, companyId); err != nil { | 79 | if baseUserInfo, err = GetUserBaseInfo(c.UserId, companyId); err != nil { |
80 | return | 80 | return |
81 | } | 81 | } |
82 | - v = &protocol.Chance{ | 82 | + v = &protocol.ChanceDetail{ |
83 | Id: c.Id, | 83 | Id: c.Id, |
84 | Provider: baseUserInfo, | 84 | Provider: baseUserInfo, |
85 | 85 | ||
@@ -92,12 +92,12 @@ func GetChance(chanceId int64, companyId int64) (v *protocol.Chance, err error) | @@ -92,12 +92,12 @@ func GetChance(chanceId int64, companyId int64) (v *protocol.Chance, err error) | ||
92 | return | 92 | return |
93 | } | 93 | } |
94 | 94 | ||
95 | -func GetIncrementSql(table string,column string,incre int,id int64)(*utils.SqlData){ | 95 | +func GetIncrementSql(table string, column string, incre int, id int64) *utils.SqlData { |
96 | var sql *bytes.Buffer | 96 | var sql *bytes.Buffer |
97 | sql = bytes.NewBuffer(nil) | 97 | sql = bytes.NewBuffer(nil) |
98 | - sql.WriteString(fmt.Sprintf("update %s set %s=%s+%d ",table,column,column,incre)) | ||
99 | - sql.WriteString(fmt.Sprintf(" where id=%d",id)) | 98 | + sql.WriteString(fmt.Sprintf("update %s set %s=%s+%d ", table, column, column, incre)) |
99 | + sql.WriteString(fmt.Sprintf(" where id=%d", id)) | ||
100 | return &utils.SqlData{ | 100 | return &utils.SqlData{ |
101 | - Sql:sql.String(), | 101 | + Sql: sql.String(), |
102 | } | 102 | } |
103 | } | 103 | } |
1 | package chance | 1 | package chance |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | + "encoding/json" | ||
4 | "fmt" | 5 | "fmt" |
5 | "github.com/astaxie/beego/orm" | 6 | "github.com/astaxie/beego/orm" |
7 | + "gitlab.fjmaimaimai.com/mmm-go/gocomm/common" | ||
6 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/identity/idgen" | 8 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/identity/idgen" |
7 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" | 9 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" |
8 | "opp/internal/repository" | 10 | "opp/internal/repository" |
@@ -16,7 +18,7 @@ import ( | @@ -16,7 +18,7 @@ import ( | ||
16 | func Favorite(header *protocol.RequestHeader, request *protocol.FavoriteRequest) (rsp *protocol.FavoriteResponse, err error) { | 18 | func Favorite(header *protocol.RequestHeader, request *protocol.FavoriteRequest) (rsp *protocol.FavoriteResponse, err error) { |
17 | var ( | 19 | var ( |
18 | favorites []*models.ChanceFavorite | 20 | favorites []*models.ChanceFavorite |
19 | - chance *protocol.Chance | 21 | + chance *protocol.ChanceDetail |
20 | ) | 22 | ) |
21 | rsp = &protocol.FavoriteResponse{} | 23 | rsp = &protocol.FavoriteResponse{} |
22 | favorites, rsp.Total, err = repository.ChanceFavorite.GetChanceFavorites( | 24 | favorites, rsp.Total, err = repository.ChanceFavorite.GetChanceFavorites( |
@@ -54,7 +56,7 @@ func Favorite(header *protocol.RequestHeader, request *protocol.FavoriteRequest) | @@ -54,7 +56,7 @@ func Favorite(header *protocol.RequestHeader, request *protocol.FavoriteRequest) | ||
54 | } | 56 | } |
55 | 57 | ||
56 | //点赞/收藏 取消点赞/收藏 | 58 | //点赞/收藏 取消点赞/收藏 |
57 | -func SympathyAction(header *protocol.RequestHeader,request *protocol.SympathyActionRequest)(rsp *protocol.SympathyActionResponse,err error){ | 59 | +func SympathyAction(header *protocol.RequestHeader, request *protocol.SympathyActionRequest) (rsp *protocol.SympathyActionResponse, err error) { |
58 | var ( | 60 | var ( |
59 | exists bool | 61 | exists bool |
60 | chanceFavoirte *models.ChanceFavorite | 62 | chanceFavoirte *models.ChanceFavorite |
@@ -63,78 +65,454 @@ func SympathyAction(header *protocol.RequestHeader,request *protocol.SympathyAct | @@ -63,78 +65,454 @@ func SympathyAction(header *protocol.RequestHeader,request *protocol.SympathyAct | ||
63 | incre int = 1 | 65 | incre int = 1 |
64 | table string = "comment" | 66 | table string = "comment" |
65 | ) | 67 | ) |
66 | - rsp =&protocol.SympathyActionResponse{} | ||
67 | - if chanceFavoirte,err = repository.ChanceFavorite.GetChanceFavorite(header.Uid,header.CompanyId,request.Id,request.SourceType);err!=nil && err!=orm.ErrNoRows{ | 68 | + rsp = &protocol.SympathyActionResponse{} |
69 | + if chanceFavoirte, err = repository.ChanceFavorite.GetChanceFavorite(header.Uid, header.CompanyId, request.Id, request.SourceType); err != nil && err != orm.ErrNoRows { | ||
68 | log.Error(err) | 70 | log.Error(err) |
69 | return | 71 | return |
70 | } | 72 | } |
71 | - if request.SourceType == protocol.SourceType_Chance{ | ||
72 | - if chance,err = repository.Chance.GetChanceById(request.Id);err!=nil{ | ||
73 | - log.Error("机会不存在",err) | 73 | + if request.SourceType == protocol.SourceType_Chance { |
74 | + if chance, err = repository.Chance.GetChanceById(request.Id); err != nil { | ||
75 | + log.Error("机会不存在", err) | ||
74 | return | 76 | return |
75 | } | 77 | } |
76 | chanceType = chance.ChanceType | 78 | chanceType = chance.ChanceType |
77 | table = "chance" | 79 | table = "chance" |
78 | } | 80 | } |
79 | - if chanceFavoirte!=nil{ | 81 | + if chanceFavoirte != nil { |
80 | exists = true | 82 | exists = true |
81 | - if request.MarkType ==protocol.MarkFlag_Zan { | ||
82 | - if request.SympathyType==protocol.UnMarkFlag && (chanceFavoirte.MarkFlag & protocol.MarkFlag_Zan)==0{ | 83 | + if request.MarkType == protocol.MarkFlag_Zan { |
84 | + if request.SympathyType == protocol.UnMarkFlag && (chanceFavoirte.MarkFlag&protocol.MarkFlag_Zan) == 0 { | ||
83 | err = protocol.NewSuccessWithMessage("已经取消赞,不能重复取消赞") | 85 | err = protocol.NewSuccessWithMessage("已经取消赞,不能重复取消赞") |
84 | return | 86 | return |
85 | } | 87 | } |
86 | - if request.SympathyType==protocol.MarkFlag && (chanceFavoirte.MarkFlag & protocol.MarkFlag_Zan)>0{ | 88 | + if request.SympathyType == protocol.MarkFlag && (chanceFavoirte.MarkFlag&protocol.MarkFlag_Zan) > 0 { |
87 | err = protocol.NewSuccessWithMessage("已经赞,不能重复点赞") | 89 | err = protocol.NewSuccessWithMessage("已经赞,不能重复点赞") |
88 | return | 90 | return |
89 | } | 91 | } |
90 | - }else if (request.MarkType==protocol.MarkFlag_Collect){ | ||
91 | - if request.SympathyType==protocol.UnMarkFlag && (chanceFavoirte.MarkFlag & protocol.MarkFlag_Collect)==0{ | 92 | + } else if request.MarkType == protocol.MarkFlag_Collect { |
93 | + if request.SympathyType == protocol.UnMarkFlag && (chanceFavoirte.MarkFlag&protocol.MarkFlag_Collect) == 0 { | ||
92 | err = protocol.NewSuccessWithMessage("已经取消收藏,不能重复取消收藏") | 94 | err = protocol.NewSuccessWithMessage("已经取消收藏,不能重复取消收藏") |
93 | return | 95 | return |
94 | } | 96 | } |
95 | - if request.SympathyType==protocol.MarkFlag && (chanceFavoirte.MarkFlag & protocol.MarkFlag_Collect)>0{ | 97 | + if request.SympathyType == protocol.MarkFlag && (chanceFavoirte.MarkFlag&protocol.MarkFlag_Collect) > 0 { |
96 | err = protocol.NewSuccessWithMessage("已经收藏,不能重复收藏") | 98 | err = protocol.NewSuccessWithMessage("已经收藏,不能重复收藏") |
97 | return | 99 | return |
98 | } | 100 | } |
99 | } | 101 | } |
100 | } | 102 | } |
101 | - if exists{ | ||
102 | - if err = repository.ChanceFavorite.UpdateChanceFavorite(header.Uid,header.CompanyId,request.Id,1<<(uint(request.MarkType-1)));err!=nil{ | ||
103 | - log.Error(request.MarkType,err) | 103 | + if exists { |
104 | + if err = repository.ChanceFavorite.UpdateChanceFavorite(header.Uid, header.CompanyId, request.Id, 1<<(uint(request.MarkType-1))); err != nil { | ||
105 | + log.Error(request.MarkType, err) | ||
104 | return | 106 | return |
105 | } | 107 | } |
106 | goto END | 108 | goto END |
107 | } | 109 | } |
108 | //add | 110 | //add |
109 | chanceFavoirte = &models.ChanceFavorite{ | 111 | chanceFavoirte = &models.ChanceFavorite{ |
110 | - Id:idgen.Next(), | ||
111 | - UserId:header.Uid, | ||
112 | - CompanyId:header.CompanyId, | ||
113 | - MarkFlag:request.SympathyType, | ||
114 | - SourceType:request.SourceType, | ||
115 | - SourceId:request.Id, | ||
116 | - ChanceType:chanceType, | ||
117 | - CreateAt:time.Now(), | ||
118 | - EnableStatus:1, | 112 | + Id: idgen.Next(), |
113 | + UserId: header.Uid, | ||
114 | + CompanyId: header.CompanyId, | ||
115 | + MarkFlag: request.SympathyType, | ||
116 | + SourceType: request.SourceType, | ||
117 | + SourceId: request.Id, | ||
118 | + ChanceType: chanceType, | ||
119 | + CreateAt: time.Now(), | ||
120 | + EnableStatus: 1, | ||
119 | } | 121 | } |
120 | - if _,err = repository.ChanceFavorite.AddChanceFavorite(chanceFavoirte);err!=nil{ | 122 | + if _, err = repository.ChanceFavorite.AddChanceFavorite(chanceFavoirte); err != nil { |
121 | log.Error(err) | 123 | log.Error(err) |
122 | return | 124 | return |
123 | - }else{ | ||
124 | - log.Debug(fmt.Sprintf("SympathyAction user:%d id:%d sympathy:%v",header.Uid,request.Id,request.SympathyType)) | 125 | + } else { |
126 | + log.Debug(fmt.Sprintf("SympathyAction user:%d id:%d sympathy:%v", header.Uid, request.Id, request.SympathyType)) | ||
125 | goto END | 127 | goto END |
126 | } | 128 | } |
127 | - END: | 129 | +END: |
128 | { | 130 | { |
129 | - if request.MarkType!=protocol.MarkFlag_Zan { | 131 | + if request.MarkType != protocol.MarkFlag_Zan { |
130 | return | 132 | return |
131 | } | 133 | } |
132 | - if request.SympathyType==protocol.UnMarkFlag{ | 134 | + if request.SympathyType == protocol.UnMarkFlag { |
133 | incre = -1 | 135 | incre = -1 |
134 | } | 136 | } |
135 | - if !utils.ExecuteSqlByRoll(true,agg.GetIncrementSql(table,"zan_total",incre,request.Id)){ | 137 | + if !utils.ExecuteSqlByRoll(true, agg.GetIncrementSql(table, "zan_total", incre, request.Id)) { |
136 | // | 138 | // |
137 | } | 139 | } |
138 | } | 140 | } |
139 | return | 141 | return |
140 | } | 142 | } |
143 | + | ||
144 | +//机会类型 | ||
145 | +func ChanceType(header *protocol.RequestHeader, request *protocol.ChanceTypeRequest) (rsp *protocol.ChanceTypeResponse, err error) { | ||
146 | + var () | ||
147 | + rsp = &protocol.ChanceTypeResponse{} | ||
148 | + if rsp.List, err = models.GetChanceTypeAll(); err != nil { | ||
149 | + return | ||
150 | + } | ||
151 | + return | ||
152 | +} | ||
153 | + | ||
154 | +//获取机会对应的模板列表 | ||
155 | +func Templates(header *protocol.RequestHeader, request *protocol.TemplatesRequest) (rsp *protocol.TemplatesResponse, err error) { | ||
156 | + var ( | ||
157 | + templates []*models.AuditTemplate | ||
158 | + forms []*models.AuditForm | ||
159 | + ) | ||
160 | + rsp = &protocol.TemplatesResponse{} | ||
161 | + if templates, err = models.GetAuditTemplates(header.CompanyId, request.ChanceType); err != nil { | ||
162 | + log.Error(err) | ||
163 | + return | ||
164 | + } | ||
165 | + if len(templates) == 0 { | ||
166 | + return | ||
167 | + } | ||
168 | + for i := range templates { | ||
169 | + item := templates[i] | ||
170 | + //TODO:检查模板可见 | ||
171 | + // | ||
172 | + //查询表单 | ||
173 | + if forms, err = models.GetAuditForms(header.CompanyId, item.Id); err != nil { | ||
174 | + continue | ||
175 | + } | ||
176 | + template := &protocol.Template{ | ||
177 | + Id: item.Id, | ||
178 | + Name: item.Name, | ||
179 | + Icon: item.Icon, | ||
180 | + Doc: item.Doc, | ||
181 | + FormList: make([]*protocol.Form, len(forms)), | ||
182 | + } | ||
183 | + for j := range forms { | ||
184 | + form := forms[j] | ||
185 | + template.FormList[j] = &protocol.Form{ | ||
186 | + Id: form.Id, | ||
187 | + Lable: form.Label, | ||
188 | + Value: "", | ||
189 | + InputType: form.InputType, | ||
190 | + SectionType: form.Section, | ||
191 | + Required: form.Required, | ||
192 | + } | ||
193 | + } | ||
194 | + rsp.Templates = append(rsp.Templates, template) | ||
195 | + } | ||
196 | + return | ||
197 | +} | ||
198 | + | ||
199 | +func checkTemplateIsVisible(header *protocol.RequestHeader, template *models.AuditTemplate) (result bool, err error) { | ||
200 | + //if template.VisibleType == | ||
201 | + return | ||
202 | +} | ||
203 | + | ||
204 | +//提交机会 | ||
205 | +func ChanceSubmit(header *protocol.RequestHeader, request *protocol.ChanceSubmitRequest) (rsp *protocol.ChanceSubmitResponse, err error) { | ||
206 | + var ( | ||
207 | + template *models.AuditTemplate | ||
208 | + chance *models.Chance | ||
209 | + auditConfig *protocol.AuditConfig | ||
210 | + auditFlows []*models.AuditFlowProcess | ||
211 | + ) | ||
212 | + //1.模板是否存在 | ||
213 | + if template, err = models.GetAuditTemplateById(request.AuditTemplateId); err != nil { | ||
214 | + log.Error(err) | ||
215 | + return | ||
216 | + } | ||
217 | + auditConfig = &protocol.AuditConfig{NoApprover: template.NoApprover} | ||
218 | + orm := orm.NewOrm() | ||
219 | + orm.Begin() | ||
220 | + //2.检查模板是否有权限 | ||
221 | + | ||
222 | + //3.添加机会 添加文件 | ||
223 | + chance = &models.Chance{ | ||
224 | + Id: idgen.Next(), | ||
225 | + UserId: header.Uid, | ||
226 | + CompanyId: header.CompanyId, | ||
227 | + ChanceType: template.ChanceType, | ||
228 | + AuditTemplateId: template.Id, | ||
229 | + AuditTemplateConfig: common.AssertJson(auditConfig), | ||
230 | + Content: request.Content, | ||
231 | + SourceContent: common.AssertJson(request.FormList), | ||
232 | + EnableStatus: 1, | ||
233 | + CreateAt: time.Now(), | ||
234 | + UpdateAt: time.Now(), | ||
235 | + AuditLevel: 1, | ||
236 | + DepartmentId: request.RelatedDepartment, | ||
237 | + } | ||
238 | + if _, err = orm.Insert(chance); err != nil { | ||
239 | + log.Error(err) | ||
240 | + orm.Rollback() | ||
241 | + return | ||
242 | + } | ||
243 | + | ||
244 | + //4.查询审核配置 | ||
245 | + //5.生成审核流 | ||
246 | + if auditFlows, err = GenAuditFlowProcess(header, chance.Id, template.Id, auditConfig); err != nil { | ||
247 | + log.Error(err) | ||
248 | + orm.Rollback() | ||
249 | + return | ||
250 | + } | ||
251 | + for i := 0; i < len(auditFlows); i++ { | ||
252 | + if _, err = orm.Insert(auditFlows[i]); err != nil { | ||
253 | + log.Error(err) | ||
254 | + orm.Rollback() | ||
255 | + return | ||
256 | + } | ||
257 | + | ||
258 | + } | ||
259 | + //6.文件 | ||
260 | + for _, v := range GenSpeechs(chance.Id, request.Speechs) { | ||
261 | + if _, err = orm.Insert(v); err != nil { | ||
262 | + log.Error(err) | ||
263 | + orm.Rollback() | ||
264 | + return | ||
265 | + } | ||
266 | + } | ||
267 | + for _, v := range GenVideos(chance.Id, request.Videos) { | ||
268 | + if _, err = orm.Insert(v); err != nil { | ||
269 | + log.Error(err) | ||
270 | + orm.Rollback() | ||
271 | + return | ||
272 | + } | ||
273 | + } | ||
274 | + for _, v := range GenImages(chance.Id, request.Pictures) { | ||
275 | + if _, err = orm.Insert(v); err != nil { | ||
276 | + log.Error(err) | ||
277 | + orm.Rollback() | ||
278 | + return | ||
279 | + } | ||
280 | + } | ||
281 | + orm.Commit() | ||
282 | + | ||
283 | + //6.激活审核流 | ||
284 | + //TODO:7.发送消息通知给审核人(审核消息) | ||
285 | + rsp = &protocol.ChanceSubmitResponse{} | ||
286 | + return | ||
287 | +} | ||
288 | + | ||
289 | +//生成审批流 | ||
290 | +func GenAuditFlowProcess(header *protocol.RequestHeader, chanceId int64, templateId int64, auditConfig *protocol.AuditConfig) (v []*models.AuditFlowProcess, err error) { | ||
291 | + var ( | ||
292 | + configs []*models.AuditFlowConfig | ||
293 | + IsSpecailAuditFlow bool = false | ||
294 | + ids []int64 | ||
295 | + groupId int64 | ||
296 | + company *models.Company | ||
297 | + ) | ||
298 | + if configs, err = models.GetAuditFlowConfigsLevel(templateId, 1); err != nil { | ||
299 | + log.Error(err) | ||
300 | + return | ||
301 | + } | ||
302 | + | ||
303 | + //1.检查是否是特殊审核人 | ||
304 | + for i := range configs { | ||
305 | + config := configs[i] | ||
306 | + if groupId == 0 && config.FlowType == protocol.FlowType_Normal { | ||
307 | + groupId = config.AuditGroupId | ||
308 | + continue | ||
309 | + } | ||
310 | + if len(config.FromSpecialUser) > 0 { | ||
311 | + if err = json.Unmarshal([]byte(config.FromSpecialUser), &ids); err != nil { | ||
312 | + log.Error(err) | ||
313 | + return | ||
314 | + } | ||
315 | + for j := range ids { | ||
316 | + if ids[j] == header.Uid { | ||
317 | + groupId = config.AuditGroupId | ||
318 | + IsSpecailAuditFlow = true | ||
319 | + break | ||
320 | + } | ||
321 | + } | ||
322 | + } | ||
323 | + if IsSpecailAuditFlow { | ||
324 | + break | ||
325 | + } | ||
326 | + } | ||
327 | + | ||
328 | + if groupId == 0 { | ||
329 | + err = fmt.Errorf("group_id=0 template_id:%v", templateId) | ||
330 | + log.Error(err) | ||
331 | + return | ||
332 | + } | ||
333 | + | ||
334 | + //2.查询特定的审核列表 | ||
335 | + if configs, err = models.GetAuditFlowConfigs(templateId, groupId); err != nil { | ||
336 | + log.Error(err) | ||
337 | + return | ||
338 | + } | ||
339 | + | ||
340 | + if company, err = repository.Company.GetCompanyById(header.CompanyId); err != nil { | ||
341 | + log.Error(err) | ||
342 | + return | ||
343 | + } | ||
344 | + | ||
345 | + if company.AdminId == 0 { | ||
346 | + err = fmt.Errorf("GenAuditFlowProcess:company.admin is not set") | ||
347 | + return | ||
348 | + } | ||
349 | + | ||
350 | + //3.生成审核列表 | ||
351 | + for i := range configs { | ||
352 | + config := configs[i] | ||
353 | + var userIds []int64 | ||
354 | + switch config.AuditFlowType { | ||
355 | + case protocol.AuditFlowType_Departmentor: | ||
356 | + if userIds, err = getDepartmentors(header); err != nil { | ||
357 | + log.Error(err) | ||
358 | + return | ||
359 | + } | ||
360 | + case protocol.AuditFlowType_User: | ||
361 | + if err = json.Unmarshal([]byte(config.ToUser), &userIds); err != nil { | ||
362 | + log.Error(err) | ||
363 | + return | ||
364 | + } | ||
365 | + case protocol.AuditFlowType_Role: | ||
366 | + | ||
367 | + } | ||
368 | + if len(userIds) == 0 { //当前步骤没有用户 默认一个空审核人 | ||
369 | + userIds = append(userIds, 0) | ||
370 | + } | ||
371 | + for j := 0; j < len(userIds); j++ { | ||
372 | + uid := userIds[j] | ||
373 | + if uid == 0 && auditConfig.NoApprover == protocol.NoApprover_ToAdmin { //审批人为空 转交给管理员 | ||
374 | + uid = company.AdminId | ||
375 | + } | ||
376 | + if uid == header.Uid { //审核人自己 转交给管理员 | ||
377 | + log.Info(fmt.Sprintf("GenAuditFlowProcess:chance_id:%v audit_level:%v audit_user:%v -> admin:%v", chanceId, config.Level, uid, company.AdminId)) | ||
378 | + uid = company.AdminId | ||
379 | + } | ||
380 | + item := &models.AuditFlowProcess{ | ||
381 | + Id: idgen.Next(), | ||
382 | + ChanceId: chanceId, | ||
383 | + Uid: uid, | ||
384 | + Level: config.Level, | ||
385 | + CreateAt: time.Now(), | ||
386 | + UpdateAt: time.Now(), | ||
387 | + AuditFlowType: config.AuditFlowType, | ||
388 | + FlowType: config.FlowType, | ||
389 | + ActionType: int(config.ActionType), | ||
390 | + EnableStatus: 1, | ||
391 | + } | ||
392 | + //if uid==0 && auditConfig.NoApprover==1{//审批人为空 自动通过 | ||
393 | + // item. | ||
394 | + //} | ||
395 | + if config.Level == 1 { | ||
396 | + item.IsActive = 1 | ||
397 | + //通知 user_msg | ||
398 | + } | ||
399 | + log.Info(fmt.Sprintf("GenAuditFlowProcess:chance_id:%v audit_id:%v audit_level:%v audit_user:%v action_type:%v", chanceId, item.Id, config.Level, uid, resolveActionType(config.ActionType))) | ||
400 | + v = append(v, item) | ||
401 | + } | ||
402 | + } | ||
403 | + return | ||
404 | +} | ||
405 | +func resolveActionType(t uint) string { | ||
406 | + if t == 1 { | ||
407 | + return "or" | ||
408 | + } | ||
409 | + if t == 2 { | ||
410 | + return "and" | ||
411 | + } | ||
412 | + return fmt.Sprintf("%v", t) | ||
413 | +} | ||
414 | + | ||
415 | +//获取部门长用户列表 | ||
416 | +func getDepartmentors(header *protocol.RequestHeader) (ids []int64, err error) { | ||
417 | + var ( | ||
418 | + departments []*protocol.Department | ||
419 | + ) | ||
420 | + if err = repository.UserDepartment.GetUserDepartment(header.Uid, header.CompanyId, &departments); err != nil { | ||
421 | + log.Error(err) | ||
422 | + return | ||
423 | + } | ||
424 | + | ||
425 | + for i := 0; i < len(departments); i++ { | ||
426 | + d := departments[i] | ||
427 | + //部门长存在 | ||
428 | + if len(d.ManagerString) > 0 { | ||
429 | + var tmpIds []int64 | ||
430 | + if err = json.Unmarshal([]byte(d.ManagerString), &tmpIds); err == nil && len(ids) > 0 { | ||
431 | + ids = append(ids, tmpIds...) | ||
432 | + continue | ||
433 | + } | ||
434 | + } | ||
435 | + //部门长不存在 | ||
436 | + if d.PId == 0 { | ||
437 | + ids = append(ids, 0) | ||
438 | + continue | ||
439 | + } else { | ||
440 | + ids = append(ids, getParentDepartmentors(d.PId)...) | ||
441 | + } | ||
442 | + } | ||
443 | + return | ||
444 | +} | ||
445 | + | ||
446 | +//递归寻找上一级部门长 | ||
447 | +func getParentDepartmentors(pid int) (ids []int64) { | ||
448 | + var ( | ||
449 | + department *models.Department | ||
450 | + err error | ||
451 | + ) | ||
452 | + if department.ParentId == 0 { | ||
453 | + return | ||
454 | + } | ||
455 | + if department, err = repository.Department.GetDepartmentById(pid); err != nil { | ||
456 | + log.Error(err) | ||
457 | + return | ||
458 | + } | ||
459 | + if len(department.Managers) != 0 { | ||
460 | + if err = json.Unmarshal([]byte(department.Managers), &ids); err == nil && len(ids) > 0 { | ||
461 | + return | ||
462 | + } | ||
463 | + } | ||
464 | + return getParentDepartmentors(department.ParentId) | ||
465 | +} | ||
466 | + | ||
467 | +////获取角色对应用户列表 | ||
468 | +//func getRolesUser(header *protocol.RequestHeader,toRoles string)(ids []int64){ | ||
469 | +// var roles []int | ||
470 | +// if err :=json.Unmarshal([]byte(toRoles),&roles);err!=nil{ | ||
471 | +// log.Error(err) | ||
472 | +// return | ||
473 | +// } | ||
474 | +// for i:=range roles{ | ||
475 | +// | ||
476 | +// } | ||
477 | +// return | ||
478 | +//} | ||
479 | + | ||
480 | +func GenSpeechs(id int64, objs []protocol.Speech) (v []*models.ChanceSpeech) { | ||
481 | + for i := range objs { | ||
482 | + v = append(v, &models.ChanceSpeech{ | ||
483 | + Id: idgen.Next(), | ||
484 | + Duration: objs[i].Duration, | ||
485 | + Path: objs[i].Path, | ||
486 | + ChanceId: id, | ||
487 | + CreateAt: time.Now(), | ||
488 | + }) | ||
489 | + } | ||
490 | + return | ||
491 | +} | ||
492 | + | ||
493 | +func GenVideos(id int64, objs []protocol.Video) (v []*models.ChanceVideo) { | ||
494 | + for i := range objs { | ||
495 | + v = append(v, &models.ChanceVideo{ | ||
496 | + Id: idgen.Next(), | ||
497 | + Path: objs[i].Path, | ||
498 | + ChanceId: id, | ||
499 | + Cover: objs[i].Cover, | ||
500 | + CreateAt: time.Now(), | ||
501 | + }) | ||
502 | + } | ||
503 | + return | ||
504 | +} | ||
505 | + | ||
506 | +func GenImages(id int64, objs []protocol.Picture) (v []*models.ChanceImage) { | ||
507 | + for i := range objs { | ||
508 | + v = append(v, &models.ChanceImage{ | ||
509 | + Id: idgen.Next(), | ||
510 | + Path: objs[i].Path, | ||
511 | + ChanceId: id, | ||
512 | + W: objs[i].W, | ||
513 | + H: objs[i].H, | ||
514 | + CreateAt: time.Now(), | ||
515 | + }) | ||
516 | + } | ||
517 | + return | ||
518 | +} |
1 | package department | 1 | package department |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | + "encoding/json" | ||
4 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" | 5 | "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" |
5 | "opp/internal/repository" | 6 | "opp/internal/repository" |
6 | "opp/models" | 7 | "opp/models" |
@@ -10,6 +11,7 @@ import ( | @@ -10,6 +11,7 @@ import ( | ||
10 | func Departments(header *protocol.RequestHeader, request *protocol.DepartmentsRequest) (rsp *protocol.DepartmentsResponse, err error) { | 11 | func Departments(header *protocol.RequestHeader, request *protocol.DepartmentsRequest) (rsp *protocol.DepartmentsResponse, err error) { |
11 | var ( | 12 | var ( |
12 | departments []*models.Department | 13 | departments []*models.Department |
14 | + tmpDepartment = &protocol.Department{Departments: []*protocol.Department{}} | ||
13 | ) | 15 | ) |
14 | rsp = &protocol.DepartmentsResponse{} | 16 | rsp = &protocol.DepartmentsResponse{} |
15 | switch request.Type { | 17 | switch request.Type { |
@@ -18,17 +20,11 @@ func Departments(header *protocol.RequestHeader, request *protocol.DepartmentsRe | @@ -18,17 +20,11 @@ func Departments(header *protocol.RequestHeader, request *protocol.DepartmentsRe | ||
18 | log.Error(err) | 20 | log.Error(err) |
19 | return | 21 | return |
20 | } | 22 | } |
21 | - //rsp.Departments = | ||
22 | for i := range departments { | 23 | for i := range departments { |
23 | - var newD *protocol.Department = &protocol.Department{ | ||
24 | - DepartmentId: departments[i].Id, | ||
25 | - Name: departments[i].Name, | ||
26 | - } | ||
27 | - if departments[i].ParentId == 0 { | ||
28 | - rsp.Departments = append(rsp.Departments, newD) | ||
29 | - } | ||
30 | - | 24 | + item := departments[i] |
25 | + walkDepartment(tmpDepartment, item) | ||
31 | } | 26 | } |
27 | + rsp.Departments = tmpDepartment.Departments | ||
32 | case protocol.DepartmentUser: | 28 | case protocol.DepartmentUser: |
33 | if err = repository.UserDepartment.GetUserDepartment(header.Uid, header.CompanyId, &rsp.Departments); err != nil { | 29 | if err = repository.UserDepartment.GetUserDepartment(header.Uid, header.CompanyId, &rsp.Departments); err != nil { |
34 | log.Error(err) | 30 | log.Error(err) |
@@ -40,29 +36,24 @@ func Departments(header *protocol.RequestHeader, request *protocol.DepartmentsRe | @@ -40,29 +36,24 @@ func Departments(header *protocol.RequestHeader, request *protocol.DepartmentsRe | ||
40 | return | 36 | return |
41 | } | 37 | } |
42 | 38 | ||
43 | -// | ||
44 | -//func setDepartment(departments *[]models.Department)[]*protocol.Department{ | ||
45 | -// var departments []*protocol.Department | ||
46 | -// for i :=range dfrom{ | ||
47 | -// | ||
48 | -// var newD *protocol.Department = &protocol.Department{ | ||
49 | -// DepartmentId:dfrom[i].Id, | ||
50 | -// Name:dfrom[i].Name, | ||
51 | -// } | ||
52 | -// | ||
53 | -// } | ||
54 | -// | ||
55 | -// if dfrom.ParentId ==0{ | ||
56 | -// | ||
57 | -// } | ||
58 | -// if len(department)>0{ | ||
59 | -// for i:=range department{ | ||
60 | -// if department[i].DepartmentId == dfrom.ParentId{ | ||
61 | -// department[i].Departments = append(department[i].Departments,newD) | ||
62 | -// return nil | ||
63 | -// } | ||
64 | -// return setDepartment(department[i].Departments,dfrom) | ||
65 | -// } | ||
66 | -// } | ||
67 | -// return nil | ||
68 | -//} | 39 | +//遍历部门 |
40 | +func walkDepartment(to *protocol.Department, dfrom *models.Department) (err error) { | ||
41 | + var newD *protocol.Department = &protocol.Department{ | ||
42 | + DepartmentId: dfrom.Id, | ||
43 | + Name: dfrom.Name, | ||
44 | + Departments: []*protocol.Department{}, | ||
45 | + } | ||
46 | + if len(dfrom.Managers) > 0 { | ||
47 | + if err = json.Unmarshal([]byte(dfrom.Managers), &newD.Managers); err != nil { | ||
48 | + log.Error(err, dfrom.Id, dfrom.Managers) | ||
49 | + return | ||
50 | + } | ||
51 | + } | ||
52 | + if to.DepartmentId == dfrom.ParentId { | ||
53 | + to.Departments = append(to.Departments, newD) | ||
54 | + } | ||
55 | + for i := range to.Departments { | ||
56 | + walkDepartment(to.Departments[i], dfrom) | ||
57 | + } | ||
58 | + return nil | ||
59 | +} |
-
请 注册 或 登录 后发表评论