123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. package cases
  2. import (
  3. "errors"
  4. "spaceofcheng/services/models/cases"
  5. "spaceofcheng/services/models/model"
  6. "spaceofcheng/services/service"
  7. "spaceofcheng/services/utils"
  8. "strconv"
  9. "time"
  10. "github.com/astaxie/beego"
  11. )
  12. // GetKeysByCase 根据案场获取钥匙信息
  13. func (s *CaseServ) GetKeysByCase(caseids, num string, page, pageSize int) (map[string]interface{}, error) {
  14. if pageSize == 0 {
  15. pageSize = service.PAGENUM
  16. }
  17. keys, err := s.dao.GetKeysByCase(caseids, num, page, pageSize)
  18. if err != nil {
  19. utils.LogError("获取钥匙信息失败: " + err.Error())
  20. return nil, errors.New("获取钥匙信息失败")
  21. }
  22. total, err := s.dao.GetKeysCountByCase(caseids, num)
  23. if err != nil {
  24. utils.LogError("获取钥匙信息失败: " + err.Error())
  25. return nil, errors.New("获取钥匙信息失败")
  26. }
  27. for index, key := range keys {
  28. use, err := s.dao.GetCurrentKey(key.KeyId)
  29. if err != nil {
  30. utils.LogError("获取钥匙信息失败: " + err.Error())
  31. return nil, errors.New("获取钥匙信息失败")
  32. }
  33. if use != nil {
  34. keys[index].CustomerId = use.CustomerId
  35. keys[index].CustomerName = use.CustomerName
  36. }
  37. }
  38. return map[string]interface{}{
  39. "list": keys,
  40. "pagesize": pageSize,
  41. "pagenum": total,
  42. "page": page,
  43. }, nil
  44. }
  45. // AddKeys 保存钥匙
  46. func (s *CaseServ) AddKeys(orgid, caseid string, beginnum, endnum int) error {
  47. if caseid == "" {
  48. return utils.LogError("请先选择案场!")
  49. }
  50. if endnum < beginnum {
  51. return utils.LogError("锁柜编号起始编号不能大于截止编号!")
  52. }
  53. keys, err := s.dao.GetKeyByNum(caseid, beginnum, endnum)
  54. if err != nil {
  55. utils.LogError("保存钥匙信息失败: " + err.Error())
  56. return errors.New("保存钥匙信息失败")
  57. }
  58. if len(keys) > 0 {
  59. return utils.LogError("锁柜编号存在重复!请检查后再试!")
  60. }
  61. for i := beginnum; i <= endnum; i++ {
  62. key := model.TaCaseKey{
  63. OrgId: orgid,
  64. CaseId: caseid,
  65. LockNum: strconv.Itoa(i),
  66. LockNo: i,
  67. KeyId: utils.GetGUID(),
  68. Status: cases.STATUS_UNLOCK,
  69. CreateDate: time.Now(),
  70. }
  71. _, err := s.dao.AddKey(key)
  72. if err != nil {
  73. utils.LogError("保存钥匙信息失败: " + err.Error())
  74. return errors.New("保存钥匙信息失败")
  75. }
  76. }
  77. return nil
  78. }
  79. // LockKeyByPhone 根据手机号绑定钥匙
  80. func (s *CaseServ) LockKeyByPhone(phone, keyId string) error {
  81. customer, err := s.customerdao.GetCustomerByPhone(phone)
  82. if err != nil {
  83. utils.LogError("根据手机号绑定钥匙失败: " + err.Error())
  84. return errors.New("根据手机号绑定钥匙失败")
  85. }
  86. if customer == nil {
  87. return errors.New("非注册用户不可绑定")
  88. }
  89. count, err1 := s.dao.CustomerIsBind(customer.CustomerId)
  90. if err1 != nil {
  91. utils.LogError("绑定钥匙失败: " + err1.Error())
  92. return errors.New("绑定钥匙失败")
  93. }
  94. if count > 0 {
  95. return errors.New("用户已绑定钥匙,不可重复绑定")
  96. }
  97. err = s.dao.BindKeyToUser(keyId, customer.CustomerId, customer.CustomerName)
  98. if err != nil {
  99. utils.LogError("根据手机号绑定钥匙失败: " + err.Error())
  100. return errors.New("根据手机号绑定钥匙失败")
  101. }
  102. err = s.dao.UpdateKeyState(keyId, 1)
  103. if err != nil {
  104. utils.LogError("根据手机号绑定钥匙失败: " + err.Error())
  105. return errors.New("根据手机号绑定钥匙失败")
  106. }
  107. return nil
  108. }
  109. // UnLockKey 解锁
  110. func (s *CaseServ) UnLockKey(keyid string) error {
  111. err := s.dao.UnLockKey(keyid)
  112. if err != nil {
  113. utils.LogError("解锁钥匙失败: " + err.Error())
  114. return errors.New("解锁钥匙失败")
  115. }
  116. err = s.dao.UpdateKeyState(keyid, 0)
  117. if err != nil {
  118. utils.LogError("解锁钥匙失败: " + err.Error())
  119. return errors.New("解锁钥匙失败")
  120. }
  121. return nil
  122. }
  123. // LockKey 绑定钥匙
  124. func (s *CaseServ) LockKey(keyId, customerId, customerName string) error {
  125. count, err := s.dao.CustomerIsBind(customerId)
  126. if err != nil {
  127. utils.LogError("绑定钥匙失败: " + err.Error())
  128. return errors.New("绑定钥匙失败")
  129. }
  130. if count > 0 {
  131. return errors.New("用户已绑定钥匙,不可重复绑定")
  132. }
  133. err = s.dao.BindKeyToUser(keyId, customerId, customerName)
  134. if err != nil {
  135. utils.LogError("绑定钥匙失败: " + err.Error())
  136. return errors.New("绑定钥匙失败")
  137. }
  138. err = s.dao.UpdateKeyState(keyId, 1)
  139. if err != nil {
  140. utils.LogError("绑定钥匙失败: " + err.Error())
  141. return errors.New("绑定钥匙失败")
  142. }
  143. return nil
  144. }
  145. // LockKeyVerify 二维码核销绑定钥匙
  146. func (s *CaseServ) LockKeyVerify(keyId, customerId string) error {
  147. customer, err := s.customerdao.GetCustomerByID(customerId)
  148. if err != nil {
  149. utils.LogError("绑定钥匙失败: " + err.Error())
  150. return errors.New("绑定钥匙失败")
  151. }
  152. beego.Error("------------------------------------")
  153. beego.Error(customer)
  154. beego.Error("------------------------------------")
  155. if customer == nil {
  156. return errors.New("无效客户")
  157. }
  158. count, err := s.dao.CustomerIsBind(customerId)
  159. if err != nil {
  160. utils.LogError("绑定钥匙失败: " + err.Error())
  161. return errors.New("绑定钥匙失败")
  162. }
  163. if count > 0 {
  164. return errors.New("用户已绑定钥匙,不可重复绑定")
  165. }
  166. err = s.dao.BindKeyToUser(keyId, customerId, customer.CustomerName)
  167. if err != nil {
  168. utils.LogError("绑定钥匙失败: " + err.Error())
  169. return errors.New("绑定钥匙失败")
  170. }
  171. err = s.dao.UpdateKeyState(keyId, 1)
  172. if err != nil {
  173. utils.LogError("绑定钥匙失败: " + err.Error())
  174. return errors.New("绑定钥匙失败")
  175. }
  176. return nil
  177. }
  178. // DelKey 刪除
  179. func (s *CaseServ) DelKey(keyid string) error {
  180. use, err := s.dao.GetCurrentKey(keyid)
  181. if err != nil {
  182. utils.LogError("刪除钥匙失败: " + err.Error())
  183. return errors.New("刪除钥匙失败")
  184. }
  185. if use != nil {
  186. return utils.LogError("当前锁柜未解锁!请先解锁再删除!")
  187. }
  188. err = s.dao.DelKey(keyid)
  189. return nil
  190. }