package service import ( "encoding/json" "lims_adapter/common" model "lims_adapter/model/access" "github.com/gogf/gf/frame/g" "github.com/gogf/gf/os/glog" "github.com/gogf/gf/os/gtime" ) func SendLockTaskPersonUpdate(tenant string, personid int, del, add []model.DeviceLockRelate) error { topic := g.Cfg().GetString("nsq.nsqLockDeviceTask") if topic == "" { return nil } user := User{} err := g.DB(tenant).Model("base_user").Where("Id = ?", personid).Struct(&user) if err != nil { return err } for _, l := range mergeDeviceLockRelate(add, del) { err := SendLockTask(DeviceTask{ Tenant: tenant, DeviceTask: model.DeviceTask{ TaskType: 0, DeviceId: l.DeviceId, EquipmentName: "", PersonId: user.Id, PersonName: user.Realname, TaskSequence: 0, CreatedAt: gtime.Now(), UpdatedAt: gtime.Now(), }, }) if err != nil { return err } } for _, l := range add { // 人员注册 err = SendLockTask(DeviceTask{ Tenant: tenant, DeviceTask: model.DeviceTask{ TaskType: 1, DeviceId: l.DeviceId, PersonId: user.Id, PersonName: user.Realname, TaskSequence: 1, IdCard: "", CreatedAt: gtime.Now(), UpdatedAt: gtime.Now(), }, }) if err != nil { return err } // 照片注册 err = SendLockTask(DeviceTask{ Tenant: tenant, DeviceTask: model.DeviceTask{ TaskType: 2, DeviceId: l.DeviceId, EquipmentName: "", PersonId: user.Id, PersonName: user.Realname, IdCard: "", Url: user.Photo, TaskSequence: 2, CreatedAt: gtime.Now(), UpdatedAt: gtime.Now(), }, }) if err != nil { return err } } return nil } func SendLockTask(task DeviceTask) error { topic := g.Cfg().GetString("nsq.nsqLockDeviceTask") if topic == "" { return nil } msg, err := json.Marshal(task) if err != nil { glog.Error("lock_device_task SendLockTask json marshal err:", err.Error()) return err } err = common.NsqProducer.Publish(topic, msg) if err != nil { glog.Error("发送通路设备锁更新消息失败,err:", err.Error()) } glog.Info("发送通路设备锁更新消息, 内容为:", string(msg)) return nil } func mergeDeviceLockRelate(s ...[]model.DeviceLockRelate) []model.DeviceLockRelate { ret := []model.DeviceLockRelate{} exist := map[string]bool{} for _, i := range s { for _, l := range i { if !exist[l.DeviceId] { ret = append(ret, l) } } } return ret } type DeviceTask struct { Tenant string `json:"tenant"` model.DeviceTask } type User struct { Id int `orm:"Id,primary" json:"id"` Uuid string `orm:"Uuid" json:"uuid"` AccCode string `orm:"AccCode" json:"acc_code"` Code string `orm:"Code" json:"code"` UserName string `orm:"UserName" json:"user_name"` Realname string `orm:"Realname" json:"realname"` Photo string `orm:"Photo" json:"photo"` }