作者 yangfu

用户职位 部门

... ... @@ -29,7 +29,7 @@
|我审核的机会| | | v1/chance/chances|
|机会详情| | | v1/chance/detail|
|待抓住机会列表| | |v1/chance/chances|
|提交机会| | |v1/chance/public|
|提交机会| | |v1/chance/submit|
|部门列表-全部| | |v1/department/departments|
|部门列表-用户| | |v1/department/userDepartments|
|配置-机会类型| | |v1/config/chanceType|
... ...
package v1
import (
"encoding/json"
"opp/controllers"
"opp/protocol"
"opp/services/department"
"gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log"
)
type DepartmentController struct {
controllers.BaseController
}
//Departments
//@router /departments [post]
func (this *DepartmentController) Departments() {
var msg *protocol.ResponseMessage
defer func() {
this.Resp(msg)
}()
var request *protocol.DepartmentsRequest
if err := json.Unmarshal(this.ByteBody, &request); err != nil {
log.Error(err)
msg = protocol.BadRequestParam(1)
return
}
if b, m := this.Valid(request); !b {
msg = m
return
}
header := controllers.GetRequestHeader(this.Ctx)
msg = protocol.NewReturnResponse(department.Departments(header, request))
}
... ...
... ... @@ -4,6 +4,7 @@ import "opp/models"
type IDepartmentRepository interface {
GetDepartmentById(companyId int) (v *models.Department, err error)
GetDepartmentByCompanyId(companyId int64) (v []*models.Department, err error)
}
var _ IDepartmentRepository = (*DepartmentRepository)(nil)
... ... @@ -14,6 +15,10 @@ func (r *DepartmentRepository) GetDepartmentById(id int) (v *models.Department,
return models.GetDepartmentById(id)
}
func (r *DepartmentRepository) GetDepartmentByCompanyId(companyId int64) (v []*models.Department, err error) {
return models.GetDepartmentByCompanyId(companyId)
}
type IUserDepartmentRepository interface {
GetUserDepartment(userId int64, companyId int64, v interface{}) (err error)
}
... ...
package models
import (
"errors"
"fmt"
"reflect"
"strings"
"time"
"github.com/astaxie/beego/orm"
... ... @@ -20,7 +17,7 @@ type Department struct {
DeleteAt time.Time `orm:"column(delete_at);type(timestamp)" description:"删除时间"`
UpdateAt time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"`
Member int `orm:"column(member)" description:"成员数量"`
Admin int `orm:"column(admin);null" description:"部门负责人id"`
Managers string `orm:"column(managers);null" description:"部门负责人id列表 json 数组 [ ]"`
}
func (t *Department) TableName() string {
... ... @@ -50,84 +47,6 @@ func GetDepartmentById(id int) (v *Department, err error) {
return nil, err
}
// GetAllDepartment retrieves all Department matches certain condition. Returns empty list if
// no records exist
func GetAllDepartment(query map[string]string, fields []string, sortby []string, order []string,
offset int64, limit int64) (ml []interface{}, err error) {
o := orm.NewOrm()
qs := o.QueryTable(new(Department))
// query k=v
for k, v := range query {
// rewrite dot-notation to Object__Attribute
k = strings.Replace(k, ".", "__", -1)
if strings.Contains(k, "isnull") {
qs = qs.Filter(k, (v == "true" || v == "1"))
} else {
qs = qs.Filter(k, v)
}
}
// order by:
var sortFields []string
if len(sortby) != 0 {
if len(sortby) == len(order) {
// 1) for each sort field, there is an associated order
for i, v := range sortby {
orderby := ""
if order[i] == "desc" {
orderby = "-" + v
} else if order[i] == "asc" {
orderby = v
} else {
return nil, errors.New("Error: Invalid order. Must be either [asc|desc]")
}
sortFields = append(sortFields, orderby)
}
qs = qs.OrderBy(sortFields...)
} else if len(sortby) != len(order) && len(order) == 1 {
// 2) there is exactly one order, all the sorted fields will be sorted by this order
for _, v := range sortby {
orderby := ""
if order[0] == "desc" {
orderby = "-" + v
} else if order[0] == "asc" {
orderby = v
} else {
return nil, errors.New("Error: Invalid order. Must be either [asc|desc]")
}
sortFields = append(sortFields, orderby)
}
} else if len(sortby) != len(order) && len(order) != 1 {
return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1")
}
} else {
if len(order) != 0 {
return nil, errors.New("Error: unused 'order' fields")
}
}
var l []Department
qs = qs.OrderBy(sortFields...)
if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil {
if len(fields) == 0 {
for _, v := range l {
ml = append(ml, v)
}
} else {
// trim unused fields
for _, v := range l {
m := make(map[string]interface{})
val := reflect.ValueOf(v)
for _, fname := range fields {
m[fname] = val.FieldByName(fname).Interface()
}
ml = append(ml, m)
}
}
return ml, nil
}
return nil, err
}
// UpdateDepartment updates Department by Id and returns error if
// the record to be updated doesn't exist
func UpdateDepartmentById(m *Department) (err error) {
... ... @@ -157,3 +76,16 @@ func DeleteDepartment(id int) (err error) {
}
return
}
func GetDepartmentByCompanyId(companyId int64) (v []*Department, err error) {
o := orm.NewOrm()
sql := `
select *
from department
where company_id =? and delete_at =0
order by parent_id,id`
if _, err = o.Raw(sql, companyId).QueryRows(&v); err == nil {
return
}
return
}
... ...
... ... @@ -13,11 +13,6 @@ type UserBaseInfoAggregation struct {
UserCompany *models.UserCompany
}
type Department struct {
DepartmentId int `orm:"column(department_id)`
Name string `orm:"column(name)`
}
type Position struct {
PositionId int `orm:"column(position_id)`
Name string `orm:"column(name)`
... ...
package protocol
const (
DepartmentAll = iota + 1 //公司所有部门
DepartmentUser //用户所有部门
)
/*Departments */
type DepartmentsRequest struct {
Type int `json:"type" valid:"Required"` //1:公司所有部门 2:用户所在部门
}
type DepartmentsResponse struct {
Departments []*Department `json:"departments,omitempty"`
}
type Department struct {
DepartmentId int `orm:"column(department_id) json:"id"`
Name string `orm:"column(name) json:"name"`
PId int `orm:"column(pid) json:"-"`
Departments []*Department `json:"departments,omitempty"`
}
... ...
... ... @@ -15,8 +15,9 @@ var errmessge ErrorMap = map[int]string{
2021: "登录失败,手机号或密码错误",
2025: "短信验证码验证失败",
2026: "新密码与确认密码不一致",
2027:"密码必须至少有6个字符",
2028:"请输入正确的旧密码",
2027: "密码必须至少有6个字符",
2028: "请输入正确的旧密码",
2029: "当前手机号已存在,请重新输入",
4139: "authCode无效或过期",
4140: "refreshToken过期,需要重新登录授权",
4141: "accessToken过期或无效,需要进行重新获取令牌",
... ...
... ... @@ -119,6 +119,14 @@ func init() {
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["opp/controllers/v1:DepartmentController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:DepartmentController"],
beego.ControllerComments{
Method: "Departments",
Router: `/departments`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["opp/controllers/v1:MessageController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:MessageController"],
beego.ControllerComments{
Method: "MessageCenter",
... ...
... ... @@ -19,6 +19,7 @@ func init() {
beego.NSNamespace("user", beego.NSInclude(&v1.UserController{})),
beego.NSNamespace("chance", beego.NSInclude(&v1.ChanceController{})),
beego.NSNamespace("message", beego.NSInclude(&v1.MessageController{})),
beego.NSNamespace("department", beego.NSInclude(&v1.DepartmentController{})),
)
beego.AddNamespace(nsV1)
beego.SetStaticPath("/file/opp", beego.AppConfig.String("source_path"))
... ...
package department
import (
"gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log"
"opp/internal/repository"
"opp/models"
"opp/protocol"
)
func Departments(header *protocol.RequestHeader, request *protocol.DepartmentsRequest) (rsp *protocol.DepartmentsResponse, err error) {
var (
departments []*models.Department
)
rsp = &protocol.DepartmentsResponse{}
switch request.Type {
case protocol.DepartmentAll:
if departments, err = repository.Department.GetDepartmentByCompanyId(header.CompanyId); err != nil {
log.Error(err)
return
}
//rsp.Departments =
for i := range departments {
var newD *protocol.Department = &protocol.Department{
DepartmentId: departments[i].Id,
Name: departments[i].Name,
}
if departments[i].ParentId == 0 {
rsp.Departments = append(rsp.Departments, newD)
}
}
case protocol.DepartmentUser:
if err = repository.UserDepartment.GetUserDepartment(header.Uid, header.CompanyId, &rsp.Departments); err != nil {
log.Error(err)
return
}
default:
break
}
return
}
//
//func setDepartment(departments *[]models.Department)[]*protocol.Department{
// var departments []*protocol.Department
// for i :=range dfrom{
//
// var newD *protocol.Department = &protocol.Department{
// DepartmentId:dfrom[i].Id,
// Name:dfrom[i].Name,
// }
//
// }
//
// if dfrom.ParentId ==0{
//
// }
// if len(department)>0{
// for i:=range department{
// if department[i].DepartmentId == dfrom.ParentId{
// department[i].Departments = append(department[i].Departments,newD)
// return nil
// }
// return setDepartment(department[i].Departments,dfrom)
// }
// }
// return nil
//}
... ...
... ... @@ -47,6 +47,9 @@ func ChangePhone(header *protocol.RequestHeader, request *protocol.ChangePhoneRe
log.Error(err)
return
}
if _, err = repository.User.GetUsersByMobile(request.Phone); err == nil {
err = protocol.NewErrWithMessage(2029)
}
if !result {
err = protocol.NewErrWithMessage(1012)
}
... ... @@ -68,7 +71,7 @@ func ResetPassword(header *protocol.RequestHeader, request *protocol.ResetPasswo
if !strings.EqualFold(request.NewPwd, request.ConfirmPwd) {
err = protocol.NewErrWithMessage(2026)
}
if len(request.NewPwd)<6 {
if len(request.NewPwd) < 6 {
err = protocol.NewErrWithMessage(2027)
}
err = utils.UpdateTableByMap(&models.User{Id: user.Id}, map[string]interface{}{"Passwd": request.NewPwd})
... ... @@ -84,7 +87,7 @@ func ChangePassword(header *protocol.RequestHeader, request *protocol.ChangePass
if !strings.EqualFold(request.NewPwd, request.ConfirmPwd) {
err = protocol.NewErrWithMessage(2026)
}
if len(request.NewPwd)<6 {
if len(request.NewPwd) < 6 {
err = protocol.NewErrWithMessage(2027)
}
if user, err = repository.User.GetUsersById(header.Uid); err != nil {
... ...