task3.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // Copyright 2019 getensh.com. All rights reserved.
  2. // Use of this source code is governed by getensh.com.
  3. package task
  4. import (
  5. "adm-ads/apis"
  6. "adm-ads/common.in/clinit"
  7. "adm-ads/consts"
  8. "adm-ads/model"
  9. "encoding/json"
  10. "gorm.io/gorm"
  11. "strings"
  12. )
  13. // 处理任务3的删除
  14. func handleTask3Delete(ads3 *model.Ads3) error {
  15. err := ads3.Delete(clinit.DB(),map[string]interface{}{"plate_no":ads3.PlateNo,"plate_type":ads3.PlateType})
  16. if err == gorm.ErrRecordNotFound{
  17. return nil
  18. }
  19. return err
  20. }
  21. // 处理任务3的插入
  22. func handleTask3InsertOrUpdate(ads3 *model.Ads3)error{
  23. oldAds3 := &model.Ads3{}
  24. err := oldAds3.Query(clinit.DB(),map[string]interface{}{"plate_no":ads3.PlateNo,"plate_type":ads3.PlateType})
  25. if err != nil{
  26. if err == gorm.ErrRecordNotFound{
  27. err = ads3.Insert(clinit.DB())
  28. if err != nil && !strings.Contains(err.Error(), "Duplicate") {
  29. return err
  30. }
  31. return nil
  32. }
  33. return err
  34. }else{
  35. // 更新时间大于消息时间表示是后面的消息,不处理
  36. if oldAds3.UpdatedAt > ads3.UpdatedAt{
  37. return nil
  38. }
  39. if oldAds3.Owner == ads3.Owner {
  40. return nil
  41. }else{
  42. oldAds3.Owner = ads3.Owner
  43. oldAds3.UpdatedAt = ads3.UpdatedAt
  44. err = oldAds3.Update(clinit.DB())
  45. if err == gorm.ErrRecordNotFound{
  46. return nil
  47. }else{
  48. return err
  49. }
  50. }
  51. }
  52. return nil
  53. }
  54. // 车牌和所有人对应关系(正确关系)
  55. func Task3(adsMsg *apis.AdsMessage) (err error) {
  56. ads3 := &model.Ads3{}
  57. json.Unmarshal([]byte(adsMsg.Content),&ads3)
  58. if ads3.PlateNo == "" || ads3.PlateType == "" || ads3.Owner == ""{
  59. return nil
  60. }
  61. ads3.CreatedAt = adsMsg.Timestamp
  62. ads3.UpdatedAt = adsMsg.Timestamp
  63. if adsMsg.Action == consts.ACTIONDELETE{
  64. // 删除
  65. err = handleTask3Delete(ads3)
  66. }else{
  67. // 新增或插入
  68. err = handleTask3InsertOrUpdate(ads3)
  69. }
  70. return err
  71. }