Explorar o código

feature: 门禁用户授权添加任务下发

liuyaqi %!s(int64=2) %!d(string=hai) anos
pai
achega
04521362d4

+ 5 - 4
model/access/user_lockaccess.go

@@ -8,10 +8,11 @@ import (
 type UserLockaccess internal.UserLockaccess
 
 type UserLockaccessListReq struct {
-	Page    *model.Page    `json:"page"`
-	OrderBy *model.OrderBy `json:"orderBy"`
-	LockId  string         `json:"lockId"` // 门禁ID
-	UserId  int            `json:"userId"` // 用户ID
+	Page     *model.Page    `json:"page"`
+	OrderBy  *model.OrderBy `json:"orderBy"`
+	LockId   string         `json:"lockId"`   // 门禁ID
+	UserId   int            `json:"userId"`   // 用户ID
+	UserName string         `json:"userName"` // 用户名
 }
 
 type UserLock struct {

+ 1 - 1
service/access/device_lock_relate.go

@@ -100,7 +100,7 @@ func (s DeviceLockRelateService) Get(ctx context.Context, id int) (*model.Device
 		return nil, err
 	}
 	if ent == nil {
-		return nil, myerrors.NewMsgError(nil, "反馈不存在")
+		return nil, myerrors.NewMsgError(nil, "门禁不存在")
 	}
 	return ent, nil
 }

+ 107 - 56
service/access/lock_device_task.go

@@ -1,64 +1,115 @@
 package service
 
-// import (
-// 	utilNsq "dashoo.cn/micro_libary/nsq"
-// 	"encoding/json"
-// 	"github.com/gogf/gf/frame/g"
-// 	"github.com/gogf/gf/os/glog"
-// 	"github.com/nsqio/go-nsq"
-// 	"lims_adapter/common"
-// 	model "lims_adapter/model/access"
-// )
+import (
+	"encoding/json"
+	"lims_adapter/common"
+	model "lims_adapter/model/access"
 
-// func SendLockTask(tenant string, task DeviceTask) error {
-// 	topic := g.Cfg().GetString("nsq.nsqLockDeviceTask")
-// 	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
-// }
+	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/os/glog"
+	"github.com/gogf/gf/os/gtime"
+)
 
-// type DeviceTask struct {
-// 	Tenant string `json:"tenant"`
-// 	model.DeviceTask
-// }
+func SendLockTaskPersonUpdate(tenant string, personid int, del, add []model.DeviceLockRelate) error {
+	topic := g.Cfg().GetString("nsq.nsqLockDeviceTask")
+	if topic == "" {
+		return nil
+	}
 
-// type LockDeviceTaskReceive struct {
-// }
+	user := User{}
+	err := g.DB(tenant).Model("base_user").Where("Id = ?", personid).Struct(&user)
+	if err != nil {
+		return err
+	}
 
-// func (LockDeviceTaskReceive) HandleMessage(message *nsq.Message) error {
-// 	if message.Body != nil {
-// 		task := DeviceTask{}
-// 		glog.Info("收到会议室预约的延时消息,内容为:", string(message.Body))
-// 		err := json.Unmarshal(message.Body, &task)
-// 		if err != nil {
-// 			glog.Error("LockDeviceTaskReceive nsq body json unmarshal err:", err.Error())
-// 		}
-// 		return nil
-// 	}
-// 	return nil
-// }
+	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
+		}
+	}
+	for _, l := range 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
+		}
+	}
+	return nil
+}
 
-// func LockDeviceTaskReceiveInit() {
-// 	topic := g.Cfg().GetString("nsq.nsqLockDeviceTask")
-// 	if topic == "" {
-// 		return
-// 	}
-// 	nsqChannel := utilNsq.NsqChannlNameForSrv()
-// 	consumer, err := utilNsq.NewConsumerForHandler(topic, "lock_device_task"+nsqChannel, new(LockDeviceTaskReceive))
-// 	if err != nil {
-// 		glog.Error("LockDeviceTaskReceiveInit create nsq consumer err:", err.Error())
-// 	}
-// 	<-consumer.StopChan
-// }
+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 init() {
-// 	go LockDeviceTaskReceiveInit()
-// }
+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"`
+}

+ 64 - 2
service/access/user_lockaccess.go

@@ -11,6 +11,7 @@ import (
 	"dashoo.cn/micro_libary/micro_srv"
 	"dashoo.cn/micro_libary/myerrors"
 	"dashoo.cn/micro_libary/request"
+	"github.com/gogf/gf/os/glog"
 	"github.com/gogf/gf/os/gtime"
 	"github.com/gogf/gf/util/gvalid"
 )
@@ -45,6 +46,10 @@ func (s UserLockaccessService) List(ctx context.Context, req *model.UserLockacce
 	if req.UserId != 0 {
 		dao = dao.Where("a.UserId = ?", req.UserId)
 	}
+	if req.UserName != "" {
+		likestr := fmt.Sprintf("%%%s%%", req.UserName)
+		dao = dao.Where("b.RealName like ?", likestr)
+	}
 	if req.LockId != "" {
 		dao = dao.Where("a.LockId = ?", req.LockId)
 	}
@@ -121,7 +126,7 @@ func (s UserLockaccessService) Add(ctx context.Context, req *model.UserLockacces
 	}
 
 	exist, err := s.LockDao.DB.Table("user_lockaccess").
-		Where("UserId = ?", s.userInfo.Id).Count()
+		Where("UserId = ?", req.UserId).Count()
 	if err != nil {
 		return 0, err
 	}
@@ -130,7 +135,16 @@ func (s UserLockaccessService) Add(ctx context.Context, req *model.UserLockacces
 	}
 
 	ent := []model.UserLockaccess{}
+	add := []model.DeviceLockRelate{}
 	for _, lid := range req.LockId {
+		lock, err := s.LockDao.Where("LockId = ?", lid).One()
+		if err != nil {
+			return 0, err
+		}
+		if lock == nil {
+			return 0, myerrors.NewMsgError(nil, fmt.Sprintf("门禁不存在 %s", lid))
+		}
+		add = append(add, *lock)
 		ent = append(ent, model.UserLockaccess{
 			LockId:      lid,
 			UserId:      req.UserId,
@@ -140,6 +154,13 @@ func (s UserLockaccessService) Add(ctx context.Context, req *model.UserLockacces
 		})
 	}
 	_, err = s.Dao.Insert(ent)
+	if err != nil {
+		return 0, err
+	}
+	err = SendLockTaskPersonUpdate(s.Tenant, req.UserId, nil, add)
+	if err != nil {
+		glog.Error("发送通路设备锁更新任务失败,err:", err.Error())
+	}
 	return 0, err
 }
 
@@ -148,13 +169,30 @@ func (s UserLockaccessService) Update(ctx context.Context, req *model.UserLockac
 	if validErr != nil {
 		return myerrors.NewMsgError(nil, validErr.Current().Error())
 	}
+	del := []model.DeviceLockRelate{}
+	err := s.Dao.DB.Table("user_lockaccess a").
+		LeftJoin("device_lock_relate b", "a.LockId = b.LockId").
+		Where("a.UserId = ?", req.UserId).
+		Fields("b.*").Structs(&del)
+	if err != nil {
+		return err
+	}
 
-	_, err := s.Dao.Where("UserId = ?", s.userInfo.Id).Delete()
+	_, err = s.Dao.Where("UserId = ?", req.UserId).Delete()
 	if err != nil {
 		return err
 	}
 	ent := []model.UserLockaccess{}
+	add := []model.DeviceLockRelate{}
 	for _, lid := range req.LockId {
+		lock, err := s.LockDao.Where("LockId = ?", lid).One()
+		if err != nil {
+			return err
+		}
+		if lock == nil {
+			return myerrors.NewMsgError(nil, fmt.Sprintf("门禁不存在 %s", lid))
+		}
+		add = append(add, *lock)
 		ent = append(ent, model.UserLockaccess{
 			LockId:      lid,
 			UserId:      req.UserId,
@@ -167,6 +205,13 @@ func (s UserLockaccessService) Update(ctx context.Context, req *model.UserLockac
 		return nil
 	}
 	_, err = s.Dao.Insert(ent)
+	if err != nil {
+		return err
+	}
+	err = SendLockTaskPersonUpdate(s.Tenant, req.UserId, del, add)
+	if err != nil {
+		glog.Error("发送通路设备锁更新任务失败,err:", err.Error())
+	}
 	return err
 }
 
@@ -174,6 +219,23 @@ func (s UserLockaccessService) Delete(ctx context.Context, req *model.UserLockac
 	if len(req.UserId) == 0 {
 		return nil
 	}
+	for _, uid := range req.UserId {
+		del := []model.DeviceLockRelate{}
+		err := s.Dao.DB.Table("user_lockaccess a").
+			LeftJoin("device_lock_relate b", "a.LockId = b.LockId").
+			Where("a.UserId = ?", uid).
+			Fields("b.*").Structs(&del)
+		if err != nil {
+			return err
+		}
+		fmt.Println(del)
+		err = SendLockTaskPersonUpdate(s.Tenant, uid, del, nil)
+		if err != nil {
+			glog.Error("发送通路设备锁更新任务失败,err:", err.Error())
+			return err
+		}
+	}
+
 	_, err := s.Dao.Where("UserId  IN (?)", req.UserId).Delete()
 	return err
 }

+ 33 - 5
swaggerui/swagger.yml

@@ -426,7 +426,7 @@ components:
           type: integer
           description: ""
         userName:
-          type: integer
+          type: string
           description: ""
     UserLockaccess:
       type: object
@@ -479,6 +479,10 @@ components:
           type: integer
           description: |
             用户ID
+        userName:
+          type: string
+          description: |
+            用户名
     UserLockaccessUpdateReq:
       type: object
       description: ""
@@ -684,11 +688,11 @@ paths:
         content:
           application/json:
             examples:
-              UserLockaccessGetReq:
-                $ref: '#/components/examples/UserLockaccessGetReq'
+              IdReq:
+                $ref: '#/components/examples/IdReq'
             schema:
               oneOf:
-                - $ref: '#/components/schemas/UserLockaccessGetReq'
+                - $ref: '#/components/schemas/IdReq'
         required: true
       responses:
         "200":
@@ -700,7 +704,7 @@ paths:
           description: 请求成功
       summary: 查询
       tags:
-        - 用户门禁权限设置
+        - 门禁列表
   /DeviceLockRelate.List:
     post:
       operationId: DeviceLockRelateList
@@ -869,6 +873,30 @@ paths:
       summary: 删除
       tags:
         - 用户门禁权限设置
+  /UserLockaccess.Get:
+    post:
+      operationId: UserLockaccessGet
+      requestBody:
+        content:
+          application/json:
+            examples:
+              UserLockaccessGetReq:
+                $ref: '#/components/examples/UserLockaccessGetReq'
+            schema:
+              oneOf:
+                - $ref: '#/components/schemas/UserLockaccessGetReq'
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              examples:
+                success:
+                  $ref: '#/components/examples/success'
+          description: 请求成功
+      summary: 查询
+      tags:
+        - 用户门禁权限设置
   /UserLockaccess.List:
     post:
       operationId: UserLockaccessList