作者 yangfu

refactor: 优化数据同步

@@ -262,11 +262,17 @@ func (handler ZKClockHandler) BioData(entity BIODATAEntity) (DownEntity, error) @@ -262,11 +262,17 @@ func (handler ZKClockHandler) BioData(entity BIODATAEntity) (DownEntity, error)
262 if len(userBase.UserInfo.FacePortrait) == 0 && len(entity.Tmp) > 0 && entity.Type == "9" { 262 if len(userBase.UserInfo.FacePortrait) == 0 && len(entity.Tmp) > 0 && entity.Type == "9" {
263 userBase.UserInfo.FacePortrait = entity.Tmp 263 userBase.UserInfo.FacePortrait = entity.Tmp
264 updateFlag = true 264 updateFlag = true
  265 + if len(GlobalTerminalManager.TerminalDeviceList) >= 1 { //TODO:后期移除掉,多台设备时才进行广播
  266 + event.Fire(DownEntityEvent, map[string]interface{}{"entity": NewUpdateUserFacePortraitDownEntity(generateSn(), entity.Pin, entity.Tmp)})
  267 + }
265 } 268 }
266 // 请求 人脸识别-指纹 269 // 请求 人脸识别-指纹
267 if len(userBase.UserInfo.FingerprintPortrait) == 0 && len(entity.Tmp) > 0 && entity.Type == "1" { 270 if len(userBase.UserInfo.FingerprintPortrait) == 0 && len(entity.Tmp) > 0 && entity.Type == "1" {
268 userBase.UserInfo.FingerprintPortrait = entity.Tmp 271 userBase.UserInfo.FingerprintPortrait = entity.Tmp
269 updateFlag = true 272 updateFlag = true
  273 + if len(GlobalTerminalManager.TerminalDeviceList) >= 1 {
  274 + event.Fire(DownEntityEvent, map[string]interface{}{"entity": NewUpdateUserFingerprintPortraitDownEntity(generateSn(), entity.Pin, entity.Tmp)})
  275 + }
270 } 276 }
271 if updateFlag { 277 if updateFlag {
272 _, err = userBaseRepository.Save(userBase) 278 _, err = userBaseRepository.Save(userBase)
@@ -11,7 +11,7 @@ import ( @@ -11,7 +11,7 @@ import (
11 type SyncToAttendanceMachineCommand struct { 11 type SyncToAttendanceMachineCommand struct {
12 OperateInfo *domain.OperateInfo `json:"-"` 12 OperateInfo *domain.OperateInfo `json:"-"`
13 // 用户关联的角色 13 // 用户关联的角色
14 - Users []int64 `cname:"用户关联的角色" json:"userIds" valid:"Required"` 14 + Users []string `cname:"用户关联的角色" json:"userIds"`
15 } 15 }
16 16
17 func (syncToAttendance *SyncToAttendanceMachineCommand) Valid(validation *validation.Validation) { 17 func (syncToAttendance *SyncToAttendanceMachineCommand) Valid(validation *validation.Validation) {
@@ -6,6 +6,7 @@ import ( @@ -6,6 +6,7 @@ import (
6 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/application/factory" 6 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/application/factory"
7 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/application/user/command" 7 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/application/user/command"
8 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/domain" 8 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/domain"
  9 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/infrastructure/utils"
9 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/log" 10 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/log"
10 ) 11 )
11 12
@@ -24,10 +25,23 @@ func (userService *UserService) SyncToAttendanceMachine(cmd *command.SyncToAtten @@ -24,10 +25,23 @@ func (userService *UserService) SyncToAttendanceMachine(cmd *command.SyncToAtten
24 transactionContext.RollbackTransaction() 25 transactionContext.RollbackTransaction()
25 }() 26 }()
26 userRepository, _, _ := factory.FastPgUser(transactionContext, 0) 27 userRepository, _, _ := factory.FastPgUser(transactionContext, 0)
27 -  
28 - _, users, err := userRepository.Find(map[string]interface{}{"companyId": cmd.OperateInfo.CompanyId, "inUserIds": cmd.Users})  
29 - if err != nil {  
30 - return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) 28 + orgRepository, _, _ := factory.FastPgOrg(transactionContext, 0)
  29 + var users []*domain.User
  30 + // 指定用户进行同步
  31 + if len(cmd.Users) > 0 {
  32 + _, users, err = userRepository.Find(map[string]interface{}{"companyId": cmd.OperateInfo.CompanyId, "inUserIds": utils.ToArrayInt64(cmd.Users)})
  33 + if err != nil {
  34 + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
  35 + }
  36 + } else {
  37 + org, _ := orgRepository.FindOne(map[string]interface{}{"companyId": cmd.OperateInfo.CompanyId, "orgName": "制造中心"})
  38 + if org == nil {
  39 + return nil, nil
  40 + }
  41 + _, users, err = userRepository.Find(map[string]interface{}{"companyId": cmd.OperateInfo.CompanyId, "inDepartmentIds": []int64{org.OrgId}})
  42 + if err != nil {
  43 + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
  44 + }
31 } 45 }
32 46
33 for i := range users { 47 for i := range users {
@@ -213,6 +213,9 @@ func (repository *UserRepository) Find(queryOptions map[string]interface{}) (int @@ -213,6 +213,9 @@ func (repository *UserRepository) Find(queryOptions map[string]interface{}) (int
213 if v, ok := queryOptions["inCompanyIds"]; ok && len(v.([]int64)) > 0 { 213 if v, ok := queryOptions["inCompanyIds"]; ok && len(v.([]int64)) > 0 {
214 query.Where(`company_id in (?)`, pg.In(v)) 214 query.Where(`company_id in (?)`, pg.In(v))
215 } 215 }
  216 + if v, ok := queryOptions["inDepartmentIds"]; ok && len(v.([]int64)) > 0 {
  217 + query.Where(`department_id in (?)`, pg.In(v))
  218 + }
216 query.SetWhereByQueryOption("user_code = ?", "userCode") 219 query.SetWhereByQueryOption("user_code = ?", "userCode")
217 query.SetWhereByQueryOption("ext->>'icCardNumber' = ?", "icCardNumber") 220 query.SetWhereByQueryOption("ext->>'icCardNumber' = ?", "icCardNumber")
218 query.SetWhereByQueryOption("user_base_id=?", "userBaseId") 221 query.SetWhereByQueryOption("user_base_id=?", "userBaseId")
@@ -262,3 +262,12 @@ func CopyObject(src, dst interface{}) { @@ -262,3 +262,12 @@ func CopyObject(src, dst interface{}) {
262 } 262 }
263 } 263 }
264 } 264 }
  265 +
  266 +func ToArrayInt64(inputs []string) []int64 {
  267 + result := make([]int64, 0)
  268 + for i := range inputs {
  269 + v, _ := strconv.ParseInt(inputs[i], 10, 64)
  270 + result = append(result, v)
  271 + }
  272 + return result
  273 +}