审查视图

pkg/application/company/service.go 9.7 KB
tangxvhui authored
1 2
package company
tangxvhui authored
3
import (
tangxvhui authored
4
	"encoding/json"
tangxvhui authored
5 6 7 8 9 10
	"time"

	"github.com/linmadan/egglib-go/core/application"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/company/command"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain"
tangxvhui authored
11
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/log"
tangxvhui authored
12 13
)
tangxvhui authored
14 15 16
type SyncDataCompanyService struct {
}
tangxvhui authored
17 18 19 20 21 22
// type BusinessAdminCommand struct {
// 	//company:公司
// 	Module string `json:"module"`
// 	// add:添加,edit:编辑,setCompanyCharge:更改公司主管,changeAdmin换管理员
// 	Action string `json:"action"`
// 	// 具体的对象JSON数据
庄敏学 authored
23
// 	Data json.RawMessage `json:"data"`
tangxvhui authored
24
// }
tangxvhui authored
25
庄敏学 authored
26
// 从BusinessAdmins 接收消息,变更公司数据
tangxvhui authored
27
func (c SyncDataCompanyService) FromBusinessAdmin(param *domain.MessageBody) error {
tangxvhui authored
28 29 30 31 32
	action := param.Module + "/" + param.Action
	var err error
	switch action {
	case "company/add":
		var param1 command.SaveCompanyCommand
庄敏学 authored
33
		err = json.Unmarshal(param.Data, &param1)
tangxvhui authored
34 35 36 37 38 39
		if err != nil {
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
		}
		err = c.addCompany(&param1)
	case "company/edit":
		var param2 command.SaveCompanyCommand
庄敏学 authored
40
		err = json.Unmarshal(param.Data, &param2)
tangxvhui authored
41 42 43 44 45 46
		if err != nil {
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
		}
		err = c.editCompany(&param2)
	case "company/setCompanyCharge":
		var param3 command.SetCompanyCharge
庄敏学 authored
47
		err = json.Unmarshal(param.Data, &param3)
tangxvhui authored
48 49 50 51 52 53
		if err != nil {
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
		}
		err = c.setCompanyCharge(&param3)
	case "company/changeAdmin":
		var param3 command.ChangeAdminCommand
庄敏学 authored
54
		err = json.Unmarshal(param.Data, &param3)
tangxvhui authored
55 56 57 58 59 60 61 62 63
		if err != nil {
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
		}
		err = c.changeAdmin(&param3)
	default:
		log.Logger.Error("action err:" + action)
	}

	return err
tangxvhui authored
64 65
}
庄敏学 authored
66 67 68
// addCompany
// 从BusinessAdmins 接收消息 添加公司
// module="company" action="add"
tangxvhui authored
69
func (c SyncDataCompanyService) addCompany(param *command.SaveCompanyCommand) error {
tangxvhui authored
70 71 72 73 74 75 76 77 78 79 80 81
	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()
	}()
	nowTime := time.Now()
	newCompany := domain.Company{
庄敏学 authored
82 83 84 85 86 87
		Id:            param.Company.Id,
		Logo:          param.Company.Logo,
		Name:          param.Company.Name,
		Status:        param.Company.Status,
		UpdatedAt:     nowTime,
		CreatedAt:     nowTime,
tangxvhui authored
88
		ChargeUserIds: []int64{},
庄敏学 authored
89
		DeletedAt:     nil,
tangxvhui authored
90
	}
tangxvhui authored
91
tangxvhui authored
92 93 94 95 96 97 98 99
	newUser := domain.User{
		Id:        param.User.Id,
		Account:   param.User.Phone,
		AvatarUrl: param.User.Avatar,
		CompanyId: param.User.CompanyId,
		AdminType: param.User.AdminType,
		Name:      param.User.Name,
		Status:    param.User.Status,
庄敏学 authored
100 101 102
		UpdatedAt: nowTime,
		DeletedAt: nil,
		CreatedAt: nowTime,
tangxvhui authored
103 104 105 106 107 108 109 110 111
	}
	companyRepo := factory.CreateCompanyRepository(map[string]interface{}{
		"transactionContext": transactionContext,
	})
	userRepo := factory.CreateUserRepository(map[string]interface{}{
		"transactionContext": transactionContext,
	})
	_, err = companyRepo.Insert(&newCompany)
	if err != nil {
tangxvhui authored
112
		return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
113 114 115
	}
	_, err = userRepo.Insert(&newUser)
	if err != nil {
tangxvhui authored
116
		return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
117 118 119 120
	}
	if err := transactionContext.CommitTransaction(); err != nil {
		return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
tangxvhui authored
121 122 123
	return nil
}
庄敏学 authored
124 125 126
// editCompany
// 从BusinessAdmins 接收消息 更新公司
// module="company" action="edit"
tangxvhui authored
127
func (c SyncDataCompanyService) editCompany(param *command.SaveCompanyCommand) error {
tangxvhui authored
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
	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()
	}()
	companyRepo := factory.CreateCompanyRepository(map[string]interface{}{
		"transactionContext": transactionContext,
	})
	userRepo := factory.CreateUserRepository(map[string]interface{}{
		"transactionContext": transactionContext,
	})

	_, companyList, err := companyRepo.Find(map[string]interface{}{
		"limit": 1,
庄敏学 authored
147
		"id":    param.Company.Id,
tangxvhui authored
148 149
	})
	if err != nil {
tangxvhui authored
150
		return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
151 152 153 154 155 156
	}
	_, userList, err := userRepo.Find(map[string]interface{}{
		"limit": 1,
		"id":    param.User.Id,
	})
	if err != nil {
tangxvhui authored
157
		return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
158 159 160 161 162 163 164 165 166 167
	}
	var (
		newCompany *domain.Company
		newUser    *domain.User
	)
	nowTime := time.Now()
	if len(companyList) > 0 {
		newCompany = companyList[0]
	} else {
		newCompany = &domain.Company{
庄敏学 authored
168
			CreatedAt: nowTime,
tangxvhui authored
169 170 171 172 173 174
		}
	}
	if len(userList) > 0 {
		newUser = userList[0]
	} else {
		newUser = &domain.User{
庄敏学 authored
175
			CreatedAt: nowTime,
tangxvhui authored
176 177 178
		}
	}
庄敏学 authored
179 180 181 182 183
	newCompany.Id = param.Company.Id
	newCompany.Logo = param.Company.Logo
	newCompany.Name = param.Company.Name
	newCompany.Status = param.Company.Status
	newCompany.UpdatedAt = nowTime
tangxvhui authored
184
tangxvhui authored
185 186 187 188 189 190 191
	newUser.Id = param.User.Id
	newUser.Account = param.User.Phone
	newUser.AvatarUrl = param.User.Avatar
	newUser.CompanyId = param.User.CompanyId
	newUser.AdminType = param.User.AdminType
	newUser.Name = param.User.Name
	newUser.Status = param.User.Status
庄敏学 authored
192
	newUser.UpdatedAt = nowTime
tangxvhui authored
193 194 195
	if len(companyList) > 0 {
		_, err = companyRepo.Update(newCompany)
		if err != nil {
tangxvhui authored
196
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
197 198 199 200
		}
	} else {
		_, err = companyRepo.Insert(newCompany)
		if err != nil {
tangxvhui authored
201
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
202 203 204 205 206
		}
	}
	if len(userList) > 0 {
		_, err = userRepo.Update(newUser)
		if err != nil {
tangxvhui authored
207
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
208 209 210 211
		}
	} else {
		_, err = userRepo.Insert(newUser)
		if err != nil {
tangxvhui authored
212
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
213 214 215
		}
	}
	if err := transactionContext.CommitTransaction(); err != nil {
tangxvhui authored
216
		return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
217
	}
tangxvhui authored
218 219
	return nil
}
tangxvhui authored
220
庄敏学 authored
221
// module="company" action="setCompanyCharge"
tangxvhui authored
222
func (srv SyncDataCompanyService) setCompanyCharge(param *command.SetCompanyCharge) error {
tangxvhui authored
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243
	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()
	}()

	companyRepo := factory.CreateCompanyRepository(map[string]interface{}{
		"transactionContext": transactionContext,
	})

	_, companyList, err := companyRepo.Find(map[string]interface{}{
		"id":    param.CompanyId,
		"limit": 1,
	})

	if err != nil {
tangxvhui authored
244
		return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
245 246 247
	}
	for i := range companyList {
		companyList[i].ChargeUserIds = param.ChargeUserIds
庄敏学 authored
248
		companyList[i].UpdatedAt = time.Now()
tangxvhui authored
249 250
		_, err = companyRepo.Update(companyList[i])
		if err != nil {
tangxvhui authored
251
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
252 253 254 255 256 257 258 259
		}
	}
	if err := transactionContext.CommitTransaction(); err != nil {
		return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	return nil
}
庄敏学 authored
260 261 262
// changeAdmin
// 从BusinessAdmins 接收消息 变更主管
// module="company" action="changeAdmin"
tangxvhui authored
263
func (srv SyncDataCompanyService) changeAdmin(param *command.ChangeAdminCommand) error {
tangxvhui authored
264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284
	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":     10,
		"companyId": param.CompanyId,
		"adminType": domain.UserTypeManager,
	})
	if err != nil {
tangxvhui authored
285
		return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
286 287 288 289
	}
	//修改旧管理员 为普通用户
	for i := range userList {
		userList[i].AdminType = domain.UserTypeCommon
庄敏学 authored
290
		userList[i].UpdatedAt = time.Now()
tangxvhui authored
291 292
		_, err := userRepo.Update(userList[i])
		if err != nil {
tangxvhui authored
293
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
294 295 296 297 298 299 300 301 302
		}
	}
	//获取新管理员
	_, userList2, err := userRepo.Find(map[string]interface{}{
		"limit":     1,
		"companyId": param.CompanyId,
		"account":   param.UserAccount,
	})
	if err != nil {
tangxvhui authored
303
		return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
304 305 306 307
	}
	//修改为管理员用户
	for i := range userList2 {
		userList[i].AdminType = domain.UserTypeManager
庄敏学 authored
308
		userList[i].UpdatedAt = time.Now()
tangxvhui authored
309 310
		_, err := userRepo.Update(userList[i])
		if err != nil {
tangxvhui authored
311
			return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
tangxvhui authored
312 313 314 315 316 317 318
		}
	}
	if err := transactionContext.CommitTransaction(); err != nil {
		return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	return nil
}