tm_responsiblePerson.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. package typeManage
  2. import (
  3. "context"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "gorm.io/gorm"
  8. "log-server/global"
  9. "log-server/model/common/request"
  10. "log-server/model/typeManage"
  11. "math/rand"
  12. "strconv"
  13. )
  14. func RandomString(n int) string {
  15. var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
  16. b := make([]rune, n)
  17. for i := range b {
  18. b[i] = letterRunes[rand.Intn(len(letterRunes))]
  19. }
  20. return string(b)
  21. }
  22. type ResponsiblePersonService struct {
  23. }
  24. //创建负责人
  25. func (r *ResponsiblePersonService) CreateResponsiblePerson(person typeManage.ResponsiblePerson) (err error) {
  26. //先查找是否存在同名员工
  27. err = global.GVA_DB.Table("responsible_person").Where("name = ? and mobile_phone_number = ?", person.Name, person.MobilePhoneNumber).First(&typeManage.ResponsiblePerson{}).Error
  28. if !errors.Is(err, gorm.ErrRecordNotFound) {
  29. return errors.New("已存在同名员工,请勿重复添加")
  30. }
  31. //不存在同名员工
  32. //根据image是否为空来判断是否需要图片处理
  33. //fmt.Println(person.Img)
  34. //if person.Img != "" {
  35. // var (
  36. // enc = base64.StdEncoding
  37. // path string
  38. // )
  39. // img := person.Img
  40. // timestamp:=strconv.Itoa(int(time.Now().UnixNano()))
  41. // randomStr := (RandomString(5))
  42. // imgId := timestamp+"_"+randomStr
  43. //
  44. // if img[11] == 'j' {
  45. // img = img[23:]
  46. // path = fmt.Sprintf("/img/%s.jpg", imgId)
  47. // } else if img[11] == 'p' {
  48. // img = img[22:]
  49. // path = fmt.Sprintf("/img/%s.png", imgId)
  50. // } else if img[11] == 'g' {
  51. // img = img[22:]
  52. // path = fmt.Sprintf("/img/%s.gif", imgId)
  53. // } else {
  54. // fmt.Println("不支持该文件类型")
  55. // }
  56. //
  57. // data, err := enc.DecodeString(img)
  58. // if err != nil {
  59. // log.Println(err.Error())
  60. // }
  61. // // 图片写入文件
  62. // f, _ := os.OpenFile(path, os.O_RDWR|os.O_CREATE, os.ModePerm)
  63. // defer f.Close()
  64. // if _, err := f.Write(data); err != nil {
  65. // log.Println(err)
  66. // }
  67. // //记录图片保存的地址
  68. // path = "https://qmplusimg.henrongyi.top" + path
  69. // person.Img = path
  70. //
  71. //}
  72. //数据库插入记录
  73. err = global.GVA_DB.Table("responsible_person").Omit("create_time", "update_time").Create(&person).Error
  74. //更新redis信息
  75. //state == 1,这条记录是启用状态,添加redis记录
  76. if person.State == 1 {
  77. UpdatePersonRedis(person)
  78. }
  79. return err
  80. }
  81. //删除负责人
  82. func (r *ResponsiblePersonService) DeleteResponsiblePerson(person typeManage.ResponsiblePerson) (err error) {
  83. var entity typeManage.ResponsiblePerson
  84. err = global.GVA_DB.Table("responsible_person").Where("id = ?", person.Id).First(&entity).Error
  85. if errors.Is(err, gorm.ErrRecordNotFound) {
  86. return errors.New("未找到记录,删除失败")
  87. }
  88. //先删除数据库记录
  89. err = global.GVA_DB.Table("responsible_person").Delete(&entity).Error
  90. //再删除redis缓存
  91. DeletePersonRedis(entity)
  92. return
  93. }
  94. //批量删除
  95. func (r *ResponsiblePersonService) DeleteResponsiblePersonsByIds(ids request.IdsReq) (err error) {
  96. err = global.GVA_DB.Table("responsible_person").Delete(&[]typeManage.ResponsiblePerson{}, "id in ?", ids.Ids).Error
  97. //批量删除redis记录
  98. BulkDeletionPerson(ids.Ids)
  99. return err
  100. }
  101. //更改记录
  102. func (r *ResponsiblePersonService) UpdateResponsiblePerson(person typeManage.ResponsiblePerson) (err error) {
  103. err = global.GVA_DB.Table("responsible_person").Where("id != ? and name = ?", person.Id, person.Name).First(&typeManage.ResponsiblePerson{}).Error
  104. if !errors.Is(err, gorm.ErrRecordNotFound) {
  105. return errors.New("已存在相同名字,无法更改")
  106. }
  107. //更改数据库记录
  108. err = global.GVA_DB.Table("responsible_person").Updates(&person).Error
  109. //更新redis缓存
  110. //state == 1,这条记录是启用状态,更新redis记录
  111. if person.State == 1 {
  112. UpdatePersonRedis(person)
  113. }
  114. //state == 2,这条记录是禁用状态,删除redis记录
  115. if person.State == 2 {
  116. DeletePersonRedis(person)
  117. }
  118. return
  119. }
  120. //通过id查询负责人
  121. func (r *ResponsiblePersonService) GetResponsiblePersonById(id int) (person typeManage.ResponsiblePerson, err error) {
  122. err = global.GVA_DB.Table("responsible_person").Where("id = ?", id).First(&person).Error
  123. //更新redis缓存
  124. //state == 1,这条记录是启用状态,更新redis记录
  125. if person.State == 1 {
  126. UpdatePersonRedis(person)
  127. }
  128. return
  129. }
  130. //条件查询负责人
  131. func(r *ResponsiblePersonService) GetResponsiblePerson(person typeManage.ResponsiblePerson, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error) {
  132. //获取分页数据
  133. limit := info.PageSize
  134. offset := (info.Page - 1) * info.PageSize
  135. //绑定操作结构体
  136. db := global.GVA_DB.Table("responsible_person").Model(&typeManage.ResponsiblePerson{})
  137. var personList []typeManage.ResponsiblePerson
  138. //条件查询
  139. if person.Name != "" {
  140. db.Where("name like ?","%"+person.Name+"%")
  141. }
  142. //先过滤在排序
  143. if err = db.Count(&total).Error;err != nil{
  144. return personList, total, err
  145. } else {
  146. //分页
  147. db.Limit(limit).Offset(offset)
  148. //判断是否有排序字段
  149. if order != ""{
  150. var orderStr string
  151. orderMap := make(map[string]bool, 1)
  152. orderMap["create_time"] = true
  153. if orderMap[order] {
  154. //合法排序字符
  155. if desc {
  156. orderStr = order + " desc"
  157. } else {
  158. orderStr = order
  159. }
  160. } else {
  161. //传入排序字段非法
  162. err = fmt.Errorf("传入非法字段 %v", order)
  163. return personList, total, err
  164. }
  165. err = db.Order(orderStr).Find(&personList).Error
  166. } else {
  167. //默认按照名字升序排序
  168. err = db.Order("name").Find(&personList).Error
  169. }
  170. }
  171. return personList, total, err
  172. }
  173. //更改redis记录
  174. func UpdatePersonRedis(person typeManage.ResponsiblePerson) {
  175. ctx := context.Background()
  176. key := "typeManage:responsiblePerson"
  177. field := strconv.FormatInt(person.Id, 10)
  178. //序列化
  179. datas, _ := json.Marshal(person)
  180. global.GVA_REDIS.HSet(ctx, key, field, datas)
  181. }
  182. //删除redis记录
  183. func DeletePersonRedis(person typeManage.ResponsiblePerson) {
  184. //删除redis记录
  185. ctx := context.Background()
  186. key := "typeManage:responsiblePerson"
  187. field := strconv.FormatInt(person.Id, 10)
  188. global.GVA_REDIS.HDel(ctx, key, field)
  189. }
  190. //批量删除命令
  191. func BulkDeletionPerson(ids []int) {
  192. //批量删除redis
  193. ctx := context.Background()
  194. key := "typeManage:responsiblePerson"
  195. for i := range ids{
  196. delKey := strconv.Itoa(ids[i])
  197. global.GVA_REDIS.HDel(ctx, key, delKey)
  198. }
  199. }