作者 唐旭辉

日常提交保存

@@ -59,3 +59,12 @@ func CreateUsersRepository(options map[string]interface{}) (domain.UsersReposito @@ -59,3 +59,12 @@ func CreateUsersRepository(options map[string]interface{}) (domain.UsersReposito
59 } 59 }
60 return repository.NewUsersRepository(transactionContext) 60 return repository.NewUsersRepository(transactionContext)
61 } 61 }
  62 +
  63 +// CreateUsersRepository 公司企业信息
  64 +func CreateCompanyRepository(options map[string]interface{}) (domain.CompanyRepository, error) {
  65 + var transactionContext *transaction.TransactionContext
  66 + if value, ok := options["transactionContext"]; ok {
  67 + transactionContext = value.(*transaction.TransactionContext)
  68 + }
  69 + return repository.NewCompanyRepository(transactionContext)
  70 +}
1 package service 1 package service
2 2
  3 +import (
  4 + "encoding/json"
  5 + "errors"
  6 + "fmt"
  7 + "time"
  8 +
  9 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/factory"
  10 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain"
  11 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/lib"
  12 +)
  13 +
3 type SyncCompanyService struct{} 14 type SyncCompanyService struct{}
4 15
5 -func (service SyncCompanyService) DoAction(action string, data []byte) error { 16 +//企业平台的公司基础数据
  17 +type CompanyBase struct {
  18 + Id int64 `json:"id"` //id
  19 + Name string `json:"name"` //公司名称名称
  20 + AdminCompanyId int `json:"admin_company_id"` //总后台的公司id
  21 + Logo string `json:"logo"` //公司图标
  22 + Remarks string `json:"remarks"` //备注
  23 + Status int8 `json:"status"`
  24 +}
  25 +
  26 +// CompanytData 企业平台发送过来的公司数据数据
  27 +type CompanytData struct {
  28 + Company CompanyBase `json:"company"`
  29 + User EmployeeData `json:"user"`
  30 +}
  31 +
  32 +//CompanyCharge 企业平台发送过来的变更公司主管数据
  33 +type CompanyCharge struct {
  34 + Id int64 `json:"id"`
  35 + Charge []int64 `json:"charge"`
  36 +}
  37 +
  38 +func (service SyncCompanyService) DoAction(action string, byteData []byte) error {
  39 + switch action {
  40 + case "add":
  41 + //添加公司
  42 + var (
  43 + data CompanytData
  44 + err error
  45 + )
  46 + err = json.Unmarshal(byteData, &data)
  47 + if err != nil {
  48 + return fmt.Errorf("数据解析失败:%s", err)
  49 + }
  50 + return service.addCompany(data)
  51 + case "edit":
  52 + //编辑
  53 + var (
  54 + data CompanytData
  55 + err error
  56 + )
  57 + err = json.Unmarshal(byteData, &data)
  58 + if err != nil {
  59 + return fmt.Errorf("数据解析失败:%s", err)
  60 + }
  61 + return service.updateCompany(data)
  62 + case "setCompanyCharge":
  63 + //设置公司主管
  64 + var (
  65 + data CompanyCharge
  66 + err error
  67 + )
  68 + err = json.Unmarshal(byteData, &data)
  69 + if err != nil {
  70 + return fmt.Errorf("数据解析失败:%s", err)
  71 + }
  72 + return service.updateCompanyCharge(data)
  73 + default:
  74 + return errors.New("action not found")
  75 + }
  76 + return nil
  77 +}
  78 +
  79 +func (service SyncCompanyService) addCompany(data CompanytData) error {
  80 + var (
  81 + transactionContext, _ = factory.CreateTransactionContext(nil)
  82 + err error
  83 + )
  84 + if err = transactionContext.StartTransaction(); err != nil {
  85 + return err
  86 + }
  87 + defer func() {
  88 + transactionContext.RollbackTransaction()
  89 + }()
  90 + var (
  91 + companyRespository domain.CompanyRepository
  92 + userRespository domain.UsersRepository
  93 + )
  94 + if companyRespository, err = factory.CreateCompanyRepository(map[string]interface{}{
  95 + "transactionContext": transactionContext,
  96 + }); err != nil {
  97 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  98 + }
  99 + if userRespository, err = factory.CreateUsersRepository(map[string]interface{}{
  100 + "transactionContext": transactionContext,
  101 + }); err != nil {
  102 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  103 + }
  104 + comany := domain.Company{
  105 + Id: data.Company.Id,
  106 + Name: data.Company.Name,
  107 + Phone: "",
  108 + Logo: data.Company.Logo,
  109 + Remarks: data.Company.Remarks,
  110 + AdminCompanyId: data.Company.AdminCompanyId,
  111 + Status: data.Company.Status,
  112 + Enable: domain.CompanyEnableNo, //默认初始化值
  113 + }
  114 + err = companyRespository.Add(&comany)
  115 + if err != nil {
  116 + return fmt.Errorf("添加公司数据失败,%s", err)
  117 + }
  118 + user := domain.Users{
  119 + Id: data.User.Id,
  120 + CompanyId: data.User.CompanyId,
  121 + OpenId: data.User.OpenId,
  122 + Name: data.User.Name,
  123 + Sex: data.User.Sex,
  124 + JobNum: data.User.JobNum,
  125 + Phone: data.User.Phone,
  126 + PrivatePhone: data.User.PrivatePhone,
  127 + Email: data.User.Email,
  128 + ExtensionNum: data.User.ExtensionNum,
  129 + Workspace: data.User.WorkSpace,
  130 + Status: data.User.Status,
  131 + Avatar: data.User.Avatar,
  132 + Remarks: data.User.Remarks,
  133 + ChargeStatus: data.User.ChargeStatus,
  134 + Permission: []domain.AdminPermissionBase{}, //初始化权限
  135 + AccessPartners: []domain.Partner{}, //默认初始化
  136 + }
  137 + err = userRespository.Add(&user)
  138 + if err != nil {
  139 + return fmt.Errorf("添加用户数据失败,%s", err)
  140 + }
  141 + err = transactionContext.CommitTransaction()
  142 + return nil
  143 +}
  144 +
  145 +func (service SyncCompanyService) updateCompany(data CompanytData) error {
  146 + var (
  147 + transactionContext, _ = factory.CreateTransactionContext(nil)
  148 + err error
  149 + )
  150 + if err = transactionContext.StartTransaction(); err != nil {
  151 + return err
  152 + }
  153 + defer func() {
  154 + transactionContext.RollbackTransaction()
  155 + }()
  156 + var (
  157 + companyRespository domain.CompanyRepository
  158 + userRespository domain.UsersRepository
  159 + oldCompany domain.Company
  160 + oldUser domain.Users
  161 + )
  162 + if companyRespository, err = factory.CreateCompanyRepository(map[string]interface{}{
  163 + "transactionContext": transactionContext,
  164 + }); err != nil {
  165 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  166 + }
  167 + if userRespository, err = factory.CreateUsersRepository(map[string]interface{}{
  168 + "transactionContext": transactionContext,
  169 + }); err != nil {
  170 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  171 + }
  172 + oldCompany, err = companyRespository.FindOne(map[string]interface{}{
  173 + "Id": data.Company.Id,
  174 + })
  175 + oldUser, err = userRespository.FindOne(map[string]interface{}{
  176 + "Id": data.User.Id,
  177 + })
  178 + oldCompany.Update(map[string]interface{}{
  179 + "Name": data.Company.Name,
  180 + "Logo": data.Company.Logo,
  181 + "Remarks": data.Company.Remarks,
  182 + "AdminCompanyId": data.Company.AdminCompanyId,
  183 + "Status": data.User.Status,
  184 + })
  185 + entryTime, _ := time.Parse("2006-01-02", data.User.EntryTime)
  186 + oldUser.Update(map[string]interface{}{
  187 + "CompanyId": data.User.CompanyId,
  188 + "OpenId": data.User.OpenId,
  189 + "Name": data.User.Name,
  190 + "Sex": data.User.Sex,
  191 + "JobNum": data.User.JobNum,
  192 + "Phone": data.User.Phone,
  193 + "PrivatePhone": data.User.PrivatePhone,
  194 + "Email": data.User.Email,
  195 + "ExtensionNum": data.User.ExtensionNum,
  196 + "Workspace": data.User.WorkSpace,
  197 + "Status": data.User.Status,
  198 + "Avatar": data.User.Avatar,
  199 + "Remarks": data.User.Remarks,
  200 + "ChargeStatus": data.User.ChargeStatus,
  201 + "EntryTime": entryTime,
  202 + })
  203 + err = companyRespository.Edit(&oldCompany)
  204 + if err != nil {
  205 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  206 + }
  207 + err = userRespository.Edit(&oldUser)
  208 + if err != nil {
  209 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  210 + }
  211 + err = transactionContext.CommitTransaction()
  212 + return nil
  213 +}
  214 +
  215 +func (service SyncCompanyService) updateCompanyCharge(data CompanyCharge) error {
  216 + var (
  217 + transactionContext, _ = factory.CreateTransactionContext(nil)
  218 + err error
  219 + )
  220 + if err = transactionContext.StartTransaction(); err != nil {
  221 + return err
  222 + }
  223 + defer func() {
  224 + transactionContext.RollbackTransaction()
  225 + }()
  226 + var (
  227 + userRespository domain.UsersRepository
  228 + )
  229 + if userRespository, err = factory.CreateUsersRepository(map[string]interface{}{
  230 + "transactionContext": transactionContext,
  231 + }); err != nil {
  232 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  233 + }
  234 + var oldUsers []domain.Users
  235 + _, oldUsers, err = userRespository.Find(map[string]interface{}{
  236 + "CompanyId": data.Id,
  237 + "charge_status": domain.UserIsCompanyCharge,
  238 + "Limit": -1,
  239 + })
  240 + for i := range oldUsers {
  241 + _ = oldUsers[i].Update(map[string]interface{}{
  242 + "charge_status": domain.UserIsNotCompanyCharge,
  243 + })
  244 + err = userRespository.Edit(&oldUsers[i])
  245 + if err != nil {
  246 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, "更新用户的charge_status失败:"+err.Error())
  247 + }
  248 + }
  249 + for _, v := range data.Charge {
  250 + var userToUpdate domain.Users
  251 + userToUpdate, err := userRespository.FindOne(map[string]interface{}{
  252 + "Id": v,
  253 + })
  254 + if err != nil {
  255 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, fmt.Sprintf("获取用户id=%d的失败:%s", v, err.Error()))
  256 + }
  257 + _ = userToUpdate.Update(map[string]interface{}{
  258 + "charge_status": domain.UserIsCompanyCharge,
  259 + })
  260 + err = userRespository.Edit(&userToUpdate)
  261 + if err != nil {
  262 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, fmt.Sprintf("更新用户id=%d的失败:%s", v, err.Error()))
  263 + }
  264 + }
  265 + err = transactionContext.CommitTransaction()
6 return nil 266 return nil
7 } 267 }
@@ -87,7 +87,7 @@ func (service SyncEmployeeService) DoAction(action string, byteData []byte) erro @@ -87,7 +87,7 @@ func (service SyncEmployeeService) DoAction(action string, byteData []byte) erro
87 if err != nil { 87 if err != nil {
88 return fmt.Errorf("数据解析失败:%s", err) 88 return fmt.Errorf("数据解析失败:%s", err)
89 } 89 }
90 - err = service.addEmployeeData(data) 90 + err = service.addEmployeeData([]EmployeeData{data})
91 return err 91 return err
92 case "edit": 92 case "edit":
93 //编辑更新 93 //编辑更新
@@ -99,7 +99,7 @@ func (service SyncEmployeeService) DoAction(action string, byteData []byte) erro @@ -99,7 +99,7 @@ func (service SyncEmployeeService) DoAction(action string, byteData []byte) erro
99 if err != nil { 99 if err != nil {
100 return fmt.Errorf("数据解析失败:%s", err) 100 return fmt.Errorf("数据解析失败:%s", err)
101 } 101 }
102 - err = service.updateEmployeeData(data) 102 + err = service.updateEmployeeData([]EmployeeData{data})
103 return err 103 return err
104 case "batchDelete": 104 case "batchDelete":
105 //批量删除 105 //批量删除
@@ -123,10 +123,9 @@ func (service SyncEmployeeService) DoAction(action string, byteData []byte) erro @@ -123,10 +123,9 @@ func (service SyncEmployeeService) DoAction(action string, byteData []byte) erro
123 return fmt.Errorf("数据解析失败:%s", err) 123 return fmt.Errorf("数据解析失败:%s", err)
124 } 124 }
125 return service.updateUsersStatus(data) 125 return service.updateUsersStatus(data)
126 -  
127 - case "batchRemove":  
128 - //移动通讯录用户部门 暂时不需要  
129 - return nil 126 + // case "batchRemove":
  127 + // //移动通讯录用户部门 暂时不需要
  128 + // return nil
130 case "import": 129 case "import":
131 //批量导入 130 //批量导入
132 var ( 131 var (
@@ -137,19 +136,18 @@ func (service SyncEmployeeService) DoAction(action string, byteData []byte) erro @@ -137,19 +136,18 @@ func (service SyncEmployeeService) DoAction(action string, byteData []byte) erro
137 if err != nil { 136 if err != nil {
138 return fmt.Errorf("数据解析失败:%s", err) 137 return fmt.Errorf("数据解析失败:%s", err)
139 } 138 }
140 - // service.addEmployeeData(data.Add)  
141 - // for i := range data.Edit {  
142 - // UpdateEmployeeData(data.Edit[i])  
143 - // } 139 + err1 := service.addEmployeeData(data.Add)
  140 + err2 := service.updateEmployeeData(data.Edit)
  141 + if err1 != nil || err2 != nil {
  142 + return fmt.Errorf("添加用户错误:%s,更新用户发生错误:%s", err1, err2)
  143 + }
144 return nil 144 return nil
145 -  
146 default: 145 default:
147 - return errors.New("nothing todo") 146 + return errors.New("action not found")
148 } 147 }
149 - return nil  
150 } 148 }
151 149
152 -func (service SyncEmployeeService) addEmployeeData(data EmployeeData) error { 150 +func (service SyncEmployeeService) addEmployeeData(datas []EmployeeData) error {
153 var ( 151 var (
154 transactionContext, _ = factory.CreateTransactionContext(nil) 152 transactionContext, _ = factory.CreateTransactionContext(nil)
155 err error 153 err error
@@ -166,6 +164,8 @@ func (service SyncEmployeeService) addEmployeeData(data EmployeeData) error { @@ -166,6 +164,8 @@ func (service SyncEmployeeService) addEmployeeData(data EmployeeData) error {
166 }); err != nil { 164 }); err != nil {
167 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) 165 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
168 } 166 }
  167 + for i := range datas {
  168 + data := datas[i]
169 newUser := domain.Users{ 169 newUser := domain.Users{
170 Id: data.Id, 170 Id: data.Id,
171 CompanyId: data.CompanyId, 171 CompanyId: data.CompanyId,
@@ -182,18 +182,19 @@ func (service SyncEmployeeService) addEmployeeData(data EmployeeData) error { @@ -182,18 +182,19 @@ func (service SyncEmployeeService) addEmployeeData(data EmployeeData) error {
182 Avatar: data.Avatar, 182 Avatar: data.Avatar,
183 Remarks: data.Remarks, 183 Remarks: data.Remarks,
184 ChargeStatus: data.ChargeStatus, 184 ChargeStatus: data.ChargeStatus,
185 - Permission: []domain.AdminPermissionBase{}, //权限  
186 - AccessPartners: []domain.Partner{}, 185 + Permission: []domain.AdminPermissionBase{}, //初始化权限
  186 + AccessPartners: []domain.Partner{}, //默认初始化
187 } 187 }
188 newUser.EntryTime, _ = time.Parse("2006-01-02", data.EntryTime) 188 newUser.EntryTime, _ = time.Parse("2006-01-02", data.EntryTime)
189 if err = usersRepository.Add(&newUser); err != nil { 189 if err = usersRepository.Add(&newUser); err != nil {
190 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) 190 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
191 } 191 }
  192 + }
192 err = transactionContext.CommitTransaction() 193 err = transactionContext.CommitTransaction()
193 return err 194 return err
194 } 195 }
195 196
196 -func (service SyncEmployeeService) updateEmployeeData(data EmployeeData) error { 197 +func (service SyncEmployeeService) updateEmployeeData(datas []EmployeeData) error {
197 var ( 198 var (
198 transactionContext, _ = factory.CreateTransactionContext(nil) 199 transactionContext, _ = factory.CreateTransactionContext(nil)
199 err error 200 err error
@@ -210,16 +211,17 @@ func (service SyncEmployeeService) updateEmployeeData(data EmployeeData) error { @@ -210,16 +211,17 @@ func (service SyncEmployeeService) updateEmployeeData(data EmployeeData) error {
210 }); err != nil { 211 }); err != nil {
211 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) 212 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
212 } 213 }
  214 + for i := range datas {
  215 + data := datas[i]
213 var oldUser domain.Users 216 var oldUser domain.Users
214 - oldUser, err = usersRepository.FindOne(domain.UsersFindOneQuery{  
215 - Id: data.Id, 217 + oldUser, err = usersRepository.FindOne(map[string]interface{}{
  218 + "Id": data.Id,
216 }) 219 })
217 if err != nil { 220 if err != nil {
218 return lib.ThrowError(lib.BUSINESS_ERROR, err.Error()) 221 return lib.ThrowError(lib.BUSINESS_ERROR, err.Error())
219 } 222 }
220 entryTime, _ := time.Parse("2006-01-02", data.EntryTime) 223 entryTime, _ := time.Parse("2006-01-02", data.EntryTime)
221 _ = oldUser.Update(map[string]interface{}{ 224 _ = oldUser.Update(map[string]interface{}{
222 - "Id": data.Id,  
223 "CompanyId": data.CompanyId, 225 "CompanyId": data.CompanyId,
224 "OpenId": data.OpenId, 226 "OpenId": data.OpenId,
225 "Name": data.Name, 227 "Name": data.Name,
@@ -239,10 +241,12 @@ func (service SyncEmployeeService) updateEmployeeData(data EmployeeData) error { @@ -239,10 +241,12 @@ func (service SyncEmployeeService) updateEmployeeData(data EmployeeData) error {
239 if err = usersRepository.Edit(&oldUser); err != nil { 241 if err = usersRepository.Edit(&oldUser); err != nil {
240 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) 242 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
241 } 243 }
  244 + }
242 err = transactionContext.CommitTransaction() 245 err = transactionContext.CommitTransaction()
243 return err 246 return err
244 } 247 }
245 248
  249 +//deleteEmployeeData 删除用户
246 func (service SyncEmployeeService) deleteEmployeeData(data DeleteUserData) error { 250 func (service SyncEmployeeService) deleteEmployeeData(data DeleteUserData) error {
247 var ( 251 var (
248 transactionContext, _ = factory.CreateTransactionContext(nil) 252 transactionContext, _ = factory.CreateTransactionContext(nil)
@@ -291,3 +295,8 @@ func (service SyncEmployeeService) updateUsersStatus(data ForbidAllowUserData) e @@ -291,3 +295,8 @@ func (service SyncEmployeeService) updateUsersStatus(data ForbidAllowUserData) e
291 err = transactionContext.CommitTransaction() 295 err = transactionContext.CommitTransaction()
292 return err 296 return err
293 } 297 }
  298 +
  299 +//ChangeAdmin 变更公司负责人,超级管理员
  300 +func (service SyncEmployeeService) ChangeAdmin() error {
  301 + return nil
  302 +}
1 package domain 1 package domain
2 2
3 -import "time" 3 +import (
  4 + "fmt"
  5 + "time"
  6 +)
4 7
5 // 公司的状态 1正常 2禁用 8 // 公司的状态 1正常 2禁用
6 const ( 9 const (
@@ -48,6 +51,34 @@ func (c Company) EnableIsOk() bool { @@ -48,6 +51,34 @@ func (c Company) EnableIsOk() bool {
48 return c.Enable == CompanyEnableYes 51 return c.Enable == CompanyEnableYes
49 } 52 }
50 53
  54 +func (c *Company) Update(m map[string]interface{}) error {
  55 + if v, ok := m["Name"]; ok {
  56 + c.Name = fmt.Sprint(v)
  57 + }
  58 + if v, ok := m["Phone"]; ok {
  59 + c.Phone = fmt.Sprint(v)
  60 + }
  61 + if v, ok := m["Logo"]; ok {
  62 + c.Logo = fmt.Sprint(v)
  63 + }
  64 + if v, ok := m["Remarks"]; ok {
  65 + c.Remarks = fmt.Sprint(v)
  66 + }
  67 + if v, ok := m["AdminCompanyId"]; ok {
  68 + c.AdminCompanyId = v.(int)
  69 + }
  70 + if v, ok := m["Remarks"]; ok {
  71 + c.Remarks = fmt.Sprint(v)
  72 + }
  73 + if v, ok := m["Status"]; ok {
  74 + c.Status = v.(int8)
  75 + }
  76 + if v, ok := m["Enable"]; ok {
  77 + c.Enable = v.(int8)
  78 + }
  79 + return nil
  80 +}
  81 +
51 type CompanyRepository interface { 82 type CompanyRepository interface {
52 Add(*Company) error 83 Add(*Company) error
53 Edit(*Company) error 84 Edit(*Company) error
@@ -10,8 +10,8 @@ const ( @@ -10,8 +10,8 @@ const (
10 10
11 //用户是否是主管 :【1:是主管】【 2:不是主管】 11 //用户是否是主管 :【1:是主管】【 2:不是主管】
12 const ( 12 const (
13 - userIsCharge int8 = 1  
14 - userIsNotCharge int8 = 2 13 + UserIsCompanyCharge int8 = 1
  14 + UserIsNotCompanyCharge int8 = 2
15 ) 15 )
16 16
17 //Users 企业平台的用户 17 //Users 企业平台的用户
@@ -36,6 +36,7 @@ type Users struct { @@ -36,6 +36,7 @@ type Users struct {
36 UpdateAt time.Time 36 UpdateAt time.Time
37 Permission []AdminPermissionBase //权限 37 Permission []AdminPermissionBase //权限
38 AccessPartners []Partner 38 AccessPartners []Partner
  39 + AdminType int8 //是否是公司负责人,即超级管理员
39 } 40 }
40 41
41 //IsUsable 用户是否可用 42 //IsUsable 用户是否可用
@@ -45,7 +46,7 @@ func (u Users) IsUsable() bool { @@ -45,7 +46,7 @@ func (u Users) IsUsable() bool {
45 46
46 //IsCharge 用户是否是主管 47 //IsCharge 用户是否是主管
47 func (u Users) IsCharge() bool { 48 func (u Users) IsCharge() bool {
48 - return u.ChargeStatus == userIsCharge 49 + return u.ChargeStatus == UserIsCompanyCharge
49 } 50 }
50 51
51 func (u Users) InCompany(companyid int64) bool { 52 func (u Users) InCompany(companyid int64) bool {
@@ -104,23 +105,26 @@ func (u *Users) Update(m map[string]interface{}) error { @@ -104,23 +105,26 @@ func (u *Users) Update(m map[string]interface{}) error {
104 if v, ok := m["AccessPartners"]; ok { 105 if v, ok := m["AccessPartners"]; ok {
105 u.AccessPartners = v.([]Partner) 106 u.AccessPartners = v.([]Partner)
106 } 107 }
  108 + if v, ok := m["AdminType"]; ok {
  109 + u.AdminType = v.(int8)
  110 + }
107 return nil 111 return nil
108 } 112 }
109 113
110 -type UsersFindOneQuery struct {  
111 - Id int64  
112 - Phone string  
113 -} 114 +// type UsersFindOneQuery struct {
  115 +// Id int64
  116 +// Phone string
  117 +// }
114 118
115 -type UsersFindQuery struct {  
116 - Ids []int64  
117 - Offset int  
118 - Limit int  
119 -} 119 +// type UsersFindQuery struct {
  120 +// Ids []int64
  121 +// Offset int
  122 +// Limit int
  123 +// }
120 type UsersRepository interface { 124 type UsersRepository interface {
121 Add(*Users) error 125 Add(*Users) error
122 Edit(*Users) error 126 Edit(*Users) error
123 Remove([]int64) error 127 Remove([]int64) error
124 - FindOne(UsersFindOneQuery) (Users, error)  
125 - Find(UsersFindQuery) (int, []Users, error) 128 + FindOne(queryOptions map[string]interface{}) (Users, error)
  129 + Find(queryOptions map[string]interface{}) (int, []Users, error)
126 } 130 }
@@ -6,7 +6,7 @@ import "time" @@ -6,7 +6,7 @@ import "time"
6 type Company struct { 6 type Company struct {
7 tableName struct{} `pg:"company"` 7 tableName struct{} `pg:"company"`
8 // 唯一标识 8 // 唯一标识
9 - Id int64 9 + Id int64 `pg:",pk"`
10 // 名称 10 // 名称
11 Name string 11 Name string
12 // 手机号码 12 // 手机号码
@@ -8,7 +8,7 @@ import ( @@ -8,7 +8,7 @@ import (
8 8
9 type Users struct { 9 type Users struct {
10 tableName struct{} `pg:"users"` 10 tableName struct{} `pg:"users"`
11 - Id int64 //用户id 11 + Id int64 `pg:",pk"` //用户id
12 CompanyId int64 //公司id 12 CompanyId int64 //公司id
13 OpenId int64 //统一用户中心 13 OpenId int64 //统一用户中心
14 Name string //用户名称 14 Name string //用户名称
@@ -23,6 +23,7 @@ type Users struct { @@ -23,6 +23,7 @@ type Users struct {
23 Status int8 //状态:【1:正常】【 2:禁用】 23 Status int8 //状态:【1:正常】【 2:禁用】
24 Avatar string ///头像 24 Avatar string ///头像
25 Remarks string //备注 25 Remarks string //备注
  26 + AdminType int8 //是否为当前公司负责人 【1:是】【2:否】
26 ChargeStatus int8 //是否为当前公司主管 【1:是】【2:否】 27 ChargeStatus int8 //是否为当前公司主管 【1:是】【2:否】
27 Permission []domain.AdminPermissionBase //权限 28 Permission []domain.AdminPermissionBase //权限
28 AccessPartners []domain.Partner //可查看的合伙人 29 AccessPartners []domain.Partner //可查看的合伙人
1 package transaction 1 package transaction
2 2
3 -import "github.com/go-pg/pg/v10" 3 +import (
  4 + "github.com/go-pg/pg/v10"
  5 + "github.com/go-pg/pg/v10/orm"
  6 +)
4 7
5 type TransactionContext struct { 8 type TransactionContext struct {
6 PgDd *pg.DB 9 PgDd *pg.DB
@@ -26,6 +29,13 @@ func (transactionContext *TransactionContext) RollbackTransaction() error { @@ -26,6 +29,13 @@ func (transactionContext *TransactionContext) RollbackTransaction() error {
26 return err 29 return err
27 } 30 }
28 31
  32 +func (transactionContext *TransactionContext) GetDB() orm.DB {
  33 + if transactionContext.PgTx != nil {
  34 + return transactionContext.PgTx
  35 + }
  36 + return transactionContext.PgDd
  37 +}
  38 +
29 func NewPGTransactionContext(pgDd *pg.DB) *TransactionContext { 39 func NewPGTransactionContext(pgDd *pg.DB) *TransactionContext {
30 return &TransactionContext{ 40 return &TransactionContext{
31 PgDd: pgDd, 41 PgDd: pgDd,
1 package repository 1 package repository
2 2
3 import ( 3 import (
  4 + "errors"
4 "fmt" 5 "fmt"
5 6
6 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain" 7 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain"
@@ -82,7 +83,25 @@ func (reponsitory CompanyRepository) Edit(m *domain.Company) error { @@ -82,7 +83,25 @@ func (reponsitory CompanyRepository) Edit(m *domain.Company) error {
82 } 83 }
83 84
84 func (reponsitory CompanyRepository) FindOne(queryOptions map[string]interface{}) (domain.Company, error) { 85 func (reponsitory CompanyRepository) FindOne(queryOptions map[string]interface{}) (domain.Company, error) {
85 - return domain.Company{}, nil 86 +
  87 + if len(queryOptions) == 0 {
  88 + return domain.Company{}, errors.New("queryOptions empty")
  89 + }
  90 + var (
  91 + err error
  92 + tx = reponsitory.transactionContext.PgTx
  93 + m models.Company
  94 + )
  95 +
  96 + query := tx.Model(&m)
  97 + if v, ok := queryOptions["Id"]; ok {
  98 + query = query.Where("id=?", v)
  99 + }
  100 + err = query.First()
  101 + if err != nil {
  102 + return domain.Company{}, err
  103 + }
  104 + return reponsitory.transformPgModelToDomainModel(&m)
86 } 105 }
87 106
88 func (reponsitory CompanyRepository) Find(queryOptions map[string]interface{}) (int64, []domain.Company, error) { 107 func (reponsitory CompanyRepository) Find(queryOptions map[string]interface{}) (int64, []domain.Company, error) {
1 package repository 1 package repository
2 2
3 import ( 3 import (
  4 + "errors"
4 "fmt" 5 "fmt"
5 "time" 6 "time"
6 7
@@ -110,24 +111,19 @@ func (reponsitory UsersRepository) Edit(u *domain.Users) error { @@ -110,24 +111,19 @@ func (reponsitory UsersRepository) Edit(u *domain.Users) error {
110 return err 111 return err
111 } 112 }
112 113
113 -func (reponsitory UsersRepository) FindOne(queryOptions domain.UsersFindOneQuery) (domain.Users, error) { 114 +func (reponsitory UsersRepository) FindOne(queryOptions map[string]interface{}) (domain.Users, error) {
  115 + if len(queryOptions) == 0 {
  116 + return domain.Users{}, errors.New("queryOptions empty")
  117 + }
114 var ( 118 var (
115 err error 119 err error
116 tx = reponsitory.transactionContext.PgTx 120 tx = reponsitory.transactionContext.PgTx
117 m models.Users 121 m models.Users
118 - hasWhere bool  
119 ) 122 )
  123 +
120 query := tx.Model(&m) 124 query := tx.Model(&m)
121 - if queryOptions.Id > 0 {  
122 - query = query.Where("id=?", queryOptions.Id)  
123 - hasWhere = true  
124 - }  
125 - if len(queryOptions.Phone) > 0 {  
126 - query = query.Where("phone=?", queryOptions.Id)  
127 - hasWhere = true  
128 - }  
129 - if !hasWhere {  
130 - return domain.Users{}, fmt.Errorf("queryOptions 中没有搜索条件") 125 + if v, ok := queryOptions["Id"]; ok {
  126 + query = query.Where("id=?", v)
131 } 127 }
132 err = query.First() 128 err = query.First()
133 if err != nil { 129 if err != nil {
@@ -136,15 +132,25 @@ func (reponsitory UsersRepository) FindOne(queryOptions domain.UsersFindOneQuery @@ -136,15 +132,25 @@ func (reponsitory UsersRepository) FindOne(queryOptions domain.UsersFindOneQuery
136 return reponsitory.transformPgModelToDomainModel(&m) 132 return reponsitory.transformPgModelToDomainModel(&m)
137 } 133 }
138 134
139 -func (reponsitory UsersRepository) Find(queryOption domain.UsersFindQuery) (int, []domain.Users, error) { 135 +func (reponsitory UsersRepository) Find(queryOption map[string]interface{}) (int, []domain.Users, error) {
140 db := reponsitory.transactionContext.PgTx 136 db := reponsitory.transactionContext.PgTx
141 usersModels := []models.Users{} 137 usersModels := []models.Users{}
142 query := db.Model(&usersModels) 138 query := db.Model(&usersModels)
143 - if queryOption.Offset > -1 {  
144 - query = query.Offset(queryOption.Offset) 139 + if v, ok := queryOption["CompanyId"]; ok {
  140 + query = query.Where("company_id=?", v)
  141 + }
  142 + if v, ok := queryOption["ChargeStatus"]; ok {
  143 + query = query.Where("charge_status=?", v)
  144 + }
  145 + if v, ok := queryOption["Offset"]; ok {
  146 + offset := v.(int)
  147 + query = query.Offset(offset)
  148 + }
  149 + if v, ok := queryOption["Limit"]; ok {
  150 + limit := v.(int)
  151 + if limit > 0 {
  152 + query = query.Limit(limit)
145 } 153 }
146 - if queryOption.Limit > 0 {  
147 - query = query.Limit(queryOption.Limit)  
148 } else { 154 } else {
149 query = query.Limit(20) 155 query = query.Limit(20)
150 } 156 }