审查视图

pkg/application/user/sync_data_service.go 9.8 KB
tangxvhui authored
1 2
package user
tangxvhui authored
3
import (
tangxvhui authored
4
	"encoding/json"
tangxvhui authored
5 6
	"time"
tangxvhui authored
7 8
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/log"
tangxvhui authored
9 10 11 12 13 14
	"github.com/linmadan/egglib-go/core/application"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/user/command"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain"
)
tangxvhui authored
15
type SyncDataUserService struct{}
tangxvhui authored
16
tangxvhui authored
17 18 19 20 21 22 23 24
// type BusinessAdminCommand struct {
// 	// employee:员工
// 	Module string `json:"module"`
// 	// add:添加,edit:编辑,batchDelete:批量删除,batchForbid:批量禁用用户,batchRemove:批量更改用户部门,import:导入用户
// 	Action string `json:"action"`
// 	// 具体的对象JSON数据
// 	Datas json.RawMessage `json:"data"`
// }
tangxvhui authored
25
tangxvhui authored
26
func (srv SyncDataUserService) FromBusinessAdmin(param *domain.MessageBody) error {
tangxvhui authored
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
	action := param.Module + "/" + param.Action
	var err error
	switch action {
	case "employee/add":
		var param1 command.SaveUserCommand
		err = json.Unmarshal(param.Datas, &param1)
		if err != nil {
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
		}
		err = srv.AddUser(&param1)
	case "employee/edit":
		var param2 command.SaveUserCommand
		err = json.Unmarshal(param.Datas, &param2)
		if err != nil {
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
		}
		err = srv.UpdateUser(&param2)
	case "employee/batchDelete":
		var param3 command.BatchDeleteCommand
		err = json.Unmarshal(param.Datas, &param3)
		if err != nil {
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
		}
		err = srv.batchDelete(&param3)
	case "company/batchForbid":
		var param4 command.BatchForbidCommand
		err = json.Unmarshal(param.Datas, &param4)
		if err != nil {
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
		}
		err = srv.batchForbid(&param4)
	case "company/import":
		var param4 command.ImportUserCommand
		err = json.Unmarshal(param.Datas, &param4)
		if err != nil {
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
		}
		err = srv.importUser(&param4)
	default:
		log.Logger.Error("action err:" + action)
	}

	return err
}
tangxvhui authored
72 73
//AddUser
//从BusinessAdmins 接收消息 添加用户
tangxvhui authored
74
//module="employee" action="add"
tangxvhui authored
75
func (srv SyncDataUserService) AddUser(param *command.SaveUserCommand) error {
tangxvhui authored
76 77 78 79 80 81 82 83 84 85
	transactionContext, err := factory.CreateTransactionContext(nil)
	if err != nil {
		return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	if err := transactionContext.StartTransaction(); err != nil {
		return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	defer func() {
		_ = transactionContext.RollbackTransaction()
	}()
tangxvhui authored
86 87 88 89
	var departmentIds []int
	for _, v := range param.UserDepartments {
		departmentIds = append(departmentIds, v.DepartmentId)
	}
tangxvhui authored
90 91
	nowTime := time.Now()
	newUser := domain.User{
tangxvhui authored
92 93 94 95 96 97 98 99 100 101 102
		Id:           param.Id,
		Account:      param.Phone,
		AvatarUrl:    param.Avatar,
		CompanyId:    param.CompanyId,
		AdminType:    param.AdminType,
		DepartmentId: departmentIds,
		Name:         param.Name,
		Status:       param.Status,
		UpdateAt:     nowTime,
		DeleteAt:     nil,
		CreateAt:     nowTime,
tangxvhui authored
103 104 105 106 107 108
	}
	userRepo := factory.CreateUserRepository(map[string]interface{}{
		"transactionContext": transactionContext,
	})
	_, err = userRepo.Insert(&newUser)
	if err != nil {
tangxvhui authored
109
		return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
110 111
	}
	if err := transactionContext.CommitTransaction(); err != nil {
tangxvhui authored
112
		return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
tangxvhui authored
113 114 115 116 117 118
	}
	return nil
}

//UpdateUser
//从BusinessAdmins 接收消息 更新用户
tangxvhui authored
119
//module="employee" action="edit"
tangxvhui authored
120
func (srv SyncDataUserService) UpdateUser(param *command.SaveUserCommand) error {
tangxvhui authored
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
	transactionContext, err := factory.CreateTransactionContext(nil)
	if err != nil {
		return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	if err := transactionContext.StartTransaction(); err != nil {
		return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	defer func() {
		_ = transactionContext.RollbackTransaction()
	}()
	userRepo := factory.CreateUserRepository(map[string]interface{}{
		"transactionContext": transactionContext,
	})
	_, userList, err := userRepo.Find(map[string]interface{}{
		"limit": 1,
		"id":    param.Id,
	})
	if err != nil {
tangxvhui authored
139
		return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
	}
	var (
		newUser *domain.User
	)
	nowTime := time.Now()
	if len(userList) > 0 {
		newUser = userList[0]
	} else {
		newUser = &domain.User{
			CreateAt: nowTime,
		}
	}
	newUser.Id = param.Id
	newUser.Account = param.Phone
	newUser.AvatarUrl = param.Avatar
	newUser.CompanyId = param.CompanyId
	newUser.AdminType = param.AdminType
	newUser.Name = param.Name
	newUser.Status = param.Status
	newUser.UpdateAt = nowTime
	if len(userList) > 0 {
		_, err = userRepo.Update(newUser)
		if err != nil {
tangxvhui authored
163
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
164 165 166 167
		}
	} else {
		_, err = userRepo.Insert(newUser)
		if err != nil {
tangxvhui authored
168
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
169 170 171
		}
	}
	if err := transactionContext.CommitTransaction(); err != nil {
tangxvhui authored
172
		return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
173 174 175 176
	}
	return nil
}
tangxvhui authored
177 178 179
//batchDelete
//从BusinessAdmins 接收消息 删除用户
//module="employee" action="batchDelete"
tangxvhui authored
180
func (srv SyncDataUserService) batchDelete(param *command.BatchDeleteCommand) error {
tangxvhui authored
181 182 183
	if len(param.Uids) == 0 {
		return nil
	}
tangxvhui authored
184 185 186 187 188 189 190 191 192 193
	transactionContext, err := factory.CreateTransactionContext(nil)
	if err != nil {
		return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	if err := transactionContext.StartTransaction(); err != nil {
		return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	defer func() {
		_ = transactionContext.RollbackTransaction()
	}()
tangxvhui authored
194 195 196
	userRepo := factory.CreateUserRepository(map[string]interface{}{
		"transactionContext": transactionContext,
	})
tangxvhui authored
197
tangxvhui authored
198 199
	err = userRepo.Remove(param.Uids)
	if err != nil {
tangxvhui authored
200
		return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
201
	}
tangxvhui authored
202
	if err := transactionContext.CommitTransaction(); err != nil {
tangxvhui authored
203
		return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
204 205 206 207 208 209 210
	}
	return nil
}

//batchForbid
//从BusinessAdmins 接收消息 禁用,启用用户
//module="employee" action="batchForbid"
tangxvhui authored
211
func (srv SyncDataUserService) batchForbid(param *command.BatchForbidCommand) error {
tangxvhui authored
212 213 214 215 216
	if len(param.Uids) == 0 {
		return nil
	}
	transactionContext, err := factory.CreateTransactionContext(nil)
	if err != nil {
tangxvhui authored
217 218
		return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
tangxvhui authored
219 220 221 222 223 224 225 226 227 228 229 230 231 232
	if err := transactionContext.StartTransaction(); err != nil {
		return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	defer func() {
		_ = transactionContext.RollbackTransaction()
	}()
	userRepo := factory.CreateUserRepository(map[string]interface{}{
		"transactionContext": transactionContext,
	})
	_, userList, err := userRepo.Find(map[string]interface{}{
		"ids":   param.Uids,
		"limit": len(param.Uids),
	})
	if err != nil {
tangxvhui authored
233
		return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
234 235 236 237 238
	}
	for i := range userList {
		userList[i].Status = param.Status
		_, err = userRepo.Update(userList[i])
		if err != nil {
tangxvhui authored
239
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
240 241 242
		}
	}
	if err := transactionContext.CommitTransaction(); err != nil {
tangxvhui authored
243
		return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
244
	}
tangxvhui authored
245 246 247
	return nil
}
tangxvhui authored
248 249 250
//importUser
//从BusinessAdmins 接收消息 导入用户数据
//module="employee" action="import"
tangxvhui authored
251
func (srv SyncDataUserService) importUser(param *command.ImportUserCommand) error {
tangxvhui authored
252 253 254 255 256 257 258 259 260 261
	transactionContext, err := factory.CreateTransactionContext(nil)
	if err != nil {
		return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	if err := transactionContext.StartTransaction(); err != nil {
		return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	defer func() {
		_ = transactionContext.RollbackTransaction()
	}()
tangxvhui authored
262 263 264
	userRepo := factory.CreateUserRepository(map[string]interface{}{
		"transactionContext": transactionContext,
	})
tangxvhui authored
265
tangxvhui authored
266 267 268 269 270 271 272 273 274 275
	editUserMap := map[int64]command.SaveUserCommand{}
	var editUserIds []int64
	for i := range param.EditUsers {
		editUserIds = append(editUserIds, param.EditUsers[i].Id)
		editUserMap[param.EditUsers[i].Id] = param.EditUsers[i]
	}
	_, editUserList, err := userRepo.Find(map[string]interface{}{
		"ids": editUserIds,
	})
	if err != nil {
tangxvhui authored
276
		return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313
	}
	nowTime := time.Now()
	for i := range editUserList {
		mVal, ok := editUserMap[editUserList[i].Id]
		if !ok {
			continue
		}
		editUserList[i].Account = mVal.Phone
		editUserList[i].AdminType = mVal.AdminType
		editUserList[i].AvatarUrl = mVal.Avatar
		editUserList[i].Name = mVal.Name
		editUserList[i].Status = mVal.Status
		editUserList[i].CompanyId = mVal.CompanyId
		editUserList[i].UpdateAt = nowTime
		_, err = userRepo.Update(editUserList[i])
		if err != nil {
			return err
		}
	}
	var (
		tempUser domain.User
	)
	for i := range param.AddUsers {
		tempUser = domain.User{
			Id:        param.AddUsers[i].Id,
			Account:   param.AddUsers[i].Phone,
			AvatarUrl: param.AddUsers[i].Avatar,
			CompanyId: param.AddUsers[i].CompanyId,
			AdminType: param.AddUsers[i].AdminType,
			Name:      param.AddUsers[i].Name,
			Status:    param.AddUsers[i].Status,
			UpdateAt:  nowTime,
			DeleteAt:  nil,
			CreateAt:  nowTime,
		}
		_, err := userRepo.Insert(&tempUser)
		if err != nil {
tangxvhui authored
314
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
315 316
		}
	}
tangxvhui authored
317
	if err := transactionContext.CommitTransaction(); err != nil {
tangxvhui authored
318
		return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
319
	}
tangxvhui authored
320
tangxvhui authored
321 322
	return nil
}