6
0

user_lockaccess.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. package service
  2. import (
  3. "context"
  4. "database/sql"
  5. "fmt"
  6. dao "lims_adapter/dao/access"
  7. m "lims_adapter/model"
  8. model "lims_adapter/model/access"
  9. "dashoo.cn/micro_libary/micro_srv"
  10. "dashoo.cn/micro_libary/myerrors"
  11. "dashoo.cn/micro_libary/request"
  12. "github.com/gogf/gf/os/glog"
  13. "github.com/gogf/gf/os/gtime"
  14. "github.com/gogf/gf/util/gvalid"
  15. )
  16. type UserLockaccessService struct {
  17. Dao *dao.UserLockaccessDao
  18. LockDao *dao.DeviceLockRelateDao
  19. Tenant string
  20. userInfo request.UserInfo
  21. }
  22. func NewUserLockaccessService(ctx context.Context) (*UserLockaccessService, error) {
  23. tenant, err := micro_srv.GetTenant(ctx)
  24. if err != nil {
  25. return nil, fmt.Errorf("获取组合码异常:%s", err.Error())
  26. }
  27. // 获取用户信息
  28. userInfo, err := micro_srv.GetUserInfo(ctx)
  29. if err != nil {
  30. return nil, fmt.Errorf("获取用户信息异常:%s", err.Error())
  31. }
  32. return &UserLockaccessService{
  33. Dao: dao.NewUserLockaccessDao(tenant),
  34. LockDao: dao.NewDeviceLockRelateDao(tenant),
  35. Tenant: tenant,
  36. userInfo: userInfo,
  37. }, nil
  38. }
  39. func (s UserLockaccessService) List(ctx context.Context, req *model.UserLockaccessListReq) (int, []*model.UserLock, error) {
  40. dao := s.LockDao.DB.Table("user_lockaccess a").LeftJoin("base_user b", "a.UserId=b.Id")
  41. if req.UserId != 0 {
  42. dao = dao.Where("a.UserId = ?", req.UserId)
  43. }
  44. if req.UserName != "" {
  45. likestr := fmt.Sprintf("%%%s%%", req.UserName)
  46. dao = dao.Where("b.RealName like ?", likestr)
  47. }
  48. if req.LockId != "" {
  49. dao = dao.Where("a.LockId = ?", req.LockId)
  50. }
  51. total, err := dao.Fields("distinct(a.UserId)").Count()
  52. if err != nil {
  53. return 0, nil, err
  54. }
  55. if req.Page != nil {
  56. if req.Page.Current == 0 {
  57. req.Page.Current = 1
  58. }
  59. if req.Page.Size == 0 {
  60. req.Page.Size = 10
  61. }
  62. dao = dao.Page(req.Page.Current, req.Page.Size)
  63. }
  64. if req.OrderBy == nil {
  65. req.OrderBy = &m.OrderBy{}
  66. }
  67. if req.OrderBy.Value == "" {
  68. req.OrderBy.Value = "a.CreatedAt"
  69. req.OrderBy.Type = "desc"
  70. }
  71. if req.OrderBy != nil && req.OrderBy.Value != "" {
  72. order := "asc"
  73. if req.OrderBy.Type == "desc" {
  74. order = "desc"
  75. }
  76. dao = dao.Order(req.OrderBy.Value, order)
  77. }
  78. ents := []*model.UserLock{}
  79. err = dao.Fields("distinct(a.UserId), b.RealName as UserName").Structs(&ents)
  80. if err != nil && err != sql.ErrNoRows {
  81. return 0, nil, err
  82. }
  83. for i := range ents {
  84. locks := []*model.DeviceLockRelate{}
  85. err = s.LockDao.Where("LockId in (select LockId from user_lockaccess where UserId = ?)", ents[i].UserId).Structs(&locks)
  86. if err != nil && err != sql.ErrNoRows {
  87. return 0, nil, err
  88. }
  89. ents[i].Lock = locks
  90. }
  91. return total, ents, err
  92. }
  93. func (s UserLockaccessService) Get(ctx context.Context, req *model.UserLockaccessGetReq) (*model.UserLock, error) {
  94. ent := model.UserLock{}
  95. err := s.Dao.DB.Table("base_user").Where("Id = ?", req.UserId).
  96. Fields("Id as UserId, RealName as UserName").Struct(&ent)
  97. if err != nil {
  98. return nil, err
  99. }
  100. locks := []*model.DeviceLockRelate{}
  101. err = s.LockDao.Where("LockId in (select LockId from user_lockaccess where UserId = ?)", req.UserId).Structs(&locks)
  102. if err != nil && err != sql.ErrNoRows {
  103. return nil, err
  104. }
  105. ent.Lock = locks
  106. return &ent, nil
  107. }
  108. func (s UserLockaccessService) Add(ctx context.Context, req *model.UserLockaccessAddReq) (int, error) {
  109. validErr := gvalid.CheckStruct(ctx, req, nil)
  110. if validErr != nil {
  111. return 0, myerrors.NewMsgError(nil, validErr.Current().Error())
  112. }
  113. if len(req.LockId) == 0 {
  114. return 0, myerrors.NewMsgError(nil, "门禁ID 不能为空")
  115. }
  116. exist, err := s.LockDao.DB.Table("user_lockaccess").
  117. Where("UserId = ?", req.UserId).Count()
  118. if err != nil {
  119. return 0, err
  120. }
  121. if exist != 0 {
  122. return 0, myerrors.NewMsgError(nil, "用户已添加")
  123. }
  124. ent := []model.UserLockaccess{}
  125. add := []model.DeviceLockRelate{}
  126. for _, lid := range req.LockId {
  127. lock, err := s.LockDao.Where("LockId = ?", lid).One()
  128. if err != nil {
  129. return 0, err
  130. }
  131. if lock == nil {
  132. return 0, myerrors.NewMsgError(nil, fmt.Sprintf("门禁不存在 %s", lid))
  133. }
  134. add = append(add, *lock)
  135. ent = append(ent, model.UserLockaccess{
  136. LockId: lid,
  137. UserId: req.UserId,
  138. CreatedById: int(s.userInfo.Id),
  139. CreatedBy: s.userInfo.RealName,
  140. CreatedAt: gtime.Now(),
  141. })
  142. }
  143. _, err = s.Dao.Insert(ent)
  144. if err != nil {
  145. return 0, err
  146. }
  147. err = SendLockTaskPersonUpdate(s.Tenant, req.UserId, nil, add)
  148. if err != nil {
  149. glog.Error("发送通路设备锁更新任务失败,err:", err.Error())
  150. }
  151. return 0, err
  152. }
  153. func (s UserLockaccessService) Update(ctx context.Context, req *model.UserLockaccessUpdateReq) error {
  154. validErr := gvalid.CheckStruct(ctx, req, nil)
  155. if validErr != nil {
  156. return myerrors.NewMsgError(nil, validErr.Current().Error())
  157. }
  158. del := []model.DeviceLockRelate{}
  159. err := s.Dao.DB.Table("user_lockaccess a").
  160. LeftJoin("device_lock_relate b", "a.LockId = b.LockId").
  161. Where("a.UserId = ?", req.UserId).
  162. Fields("b.*").Structs(&del)
  163. if err != nil {
  164. return err
  165. }
  166. _, err = s.Dao.Where("UserId = ?", req.UserId).Delete()
  167. if err != nil {
  168. return err
  169. }
  170. ent := []model.UserLockaccess{}
  171. add := []model.DeviceLockRelate{}
  172. for _, lid := range req.LockId {
  173. lock, err := s.LockDao.Where("LockId = ?", lid).One()
  174. if err != nil {
  175. return err
  176. }
  177. if lock == nil {
  178. return myerrors.NewMsgError(nil, fmt.Sprintf("门禁不存在 %s", lid))
  179. }
  180. add = append(add, *lock)
  181. ent = append(ent, model.UserLockaccess{
  182. LockId: lid,
  183. UserId: req.UserId,
  184. CreatedById: int(s.userInfo.Id),
  185. CreatedBy: s.userInfo.RealName,
  186. CreatedAt: gtime.Now(),
  187. })
  188. }
  189. if len(ent) == 0 {
  190. return nil
  191. }
  192. _, err = s.Dao.Insert(ent)
  193. if err != nil {
  194. return err
  195. }
  196. err = SendLockTaskPersonUpdate(s.Tenant, req.UserId, del, add)
  197. if err != nil {
  198. glog.Error("发送通路设备锁更新任务失败,err:", err.Error())
  199. }
  200. return err
  201. }
  202. func (s UserLockaccessService) Delete(ctx context.Context, req *model.UserLockaccessDeleteReq) error {
  203. if len(req.UserId) == 0 {
  204. return nil
  205. }
  206. for _, uid := range req.UserId {
  207. del := []model.DeviceLockRelate{}
  208. err := s.Dao.DB.Table("user_lockaccess a").
  209. LeftJoin("device_lock_relate b", "a.LockId = b.LockId").
  210. Where("a.UserId = ?", uid).
  211. Fields("b.*").Structs(&del)
  212. if err != nil {
  213. return err
  214. }
  215. fmt.Println(del)
  216. err = SendLockTaskPersonUpdate(s.Tenant, uid, del, nil)
  217. if err != nil {
  218. glog.Error("发送通路设备锁更新任务失败,err:", err.Error())
  219. return err
  220. }
  221. }
  222. _, err := s.Dao.Where("UserId IN (?)", req.UserId).Delete()
  223. return err
  224. }