test_service.go 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. package backend
  2. import (
  3. "context"
  4. "errors"
  5. "kpt-pasture/model"
  6. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  7. "gorm.io/gorm"
  8. "gitee.com/xuyiping_admin/pkg/logger/zaplog"
  9. "go.uber.org/zap"
  10. "gitee.com/xuyiping_admin/pkg/xerr"
  11. )
  12. func (s *StoreEntry) CowNeckRingNumberBound(ctx context.Context, pagination *pasturePb.PaginationModel) error {
  13. userModel, err := s.GetUserModel(ctx)
  14. if err != nil {
  15. return xerr.WithStack(err)
  16. }
  17. lastNeckRing := &model.NeckRing{}
  18. if err = s.DB.Model(new(model.NeckRing)).
  19. Order("cow_id desc").
  20. First(lastNeckRing).Error; err != nil {
  21. return xerr.WithStack(err)
  22. }
  23. cowList := make([]*model.Cow, 0)
  24. if err = s.DB.Model(new(model.Cow)).
  25. Where("id > ?", lastNeckRing.CowId).
  26. Limit(int(pagination.PageSize)).
  27. Offset(int(pagination.PageOffset)).
  28. Find(&cowList).Error; err != nil {
  29. return xerr.WithStack(err)
  30. }
  31. newNeckRingList := make([]*model.NeckRing, 0)
  32. newNeckRingBindLogList := make([]*model.NeckRingBindLog, 0)
  33. for _, cow := range cowList {
  34. newNeckRing := model.NewNeckRing(userModel.AppPasture.Id, cow.NeckRingNumber, cow, userModel.SystemUser)
  35. newNeckRingList = append(newNeckRingList, newNeckRing)
  36. newNeckRingBindLog := model.NewNeckRingBindLog(userModel.AppPasture.Id, cow.NeckRingNumber, cow, userModel.SystemUser, "")
  37. newNeckRingBindLogList = append(newNeckRingBindLogList, newNeckRingBindLog)
  38. }
  39. if err = s.DB.Model(new(model.NeckRing)).
  40. Create(newNeckRingList).Error; err != nil {
  41. zaplog.Error("CowNeckRingNumberBound-NewNeckRing", zap.Any("error", err))
  42. }
  43. if err = s.DB.Model(new(model.NeckRingBindLog)).
  44. Create(newNeckRingBindLogList).Error; err != nil {
  45. zaplog.Error("CowNeckRingNumberBound-NeckRingBindLog", zap.Any("error", err))
  46. }
  47. return nil
  48. }
  49. func (s *StoreEntry) CowNeckRingNumberBound2(ctx context.Context, pagination *pasturePb.PaginationModel) error {
  50. userModel, err := s.GetUserModel(ctx)
  51. if err != nil {
  52. return xerr.WithStack(err)
  53. }
  54. cowList := make([]*model.Cow, 0)
  55. if err = s.DB.Model(new(model.Cow)).
  56. Where("pasture_id = ?", userModel.AppPasture.Id).
  57. Where("neck_ring_number != ?", "").
  58. Limit(int(pagination.PageSize)).
  59. Offset(int(pagination.PageOffset)).
  60. Find(&cowList).Error; err != nil {
  61. return xerr.WithStack(err)
  62. }
  63. for _, cow := range cowList {
  64. newNeckRing := model.NewNeckRing(userModel.AppPasture.Id, cow.NeckRingNumber, cow, userModel.SystemUser)
  65. oldNeckRing := &model.NeckRing{}
  66. if err = s.DB.Model(new(model.NeckRing)).
  67. Where("pasture_id = ?", userModel.AppPasture.Id).
  68. Where("neck_ring_number = ?", cow.NeckRingNumber).
  69. First(oldNeckRing).Error; err != nil {
  70. if errors.Is(err, gorm.ErrRecordNotFound) {
  71. if err = s.DB.Model(new(model.NeckRing)).Create(newNeckRing).Error; err != nil {
  72. zaplog.Error("CowNeckRingNumberBound2-NewNeckRing", zap.Any("error", err))
  73. }
  74. } else {
  75. continue
  76. }
  77. }
  78. if oldNeckRing.Id > 0 {
  79. if err = s.DB.Model(new(model.NeckRing)).
  80. Where("id = ?", oldNeckRing.Id).Updates(map[string]interface{}{
  81. "cow_id": cow.Id,
  82. "ear_number": cow.EarNumber,
  83. "is_bind": pasturePb.NeckRingIsBind_Bind,
  84. }).Error; err != nil {
  85. zaplog.Error("CowNeckRingNumberBound2-OldNeckRing", zap.Any("error", err))
  86. }
  87. }
  88. }
  89. return nil
  90. }
  91. func (s *StoreEntry) UpdateCowPen(ctx context.Context, pagination *pasturePb.PaginationModel) error {
  92. cowList := make([]*model.Cow, 0)
  93. if err := s.DB.Model(new(model.Cow)).
  94. Where("pen_name = ?", "").
  95. Limit(int(pagination.PageSize)).
  96. Offset(int(pagination.PageOffset)).
  97. Find(&cowList).Error; err != nil {
  98. return xerr.WithStack(err)
  99. }
  100. penMap := s.PenMap(ctx, 1)
  101. for _, v := range cowList {
  102. pen := penMap[v.PenId]
  103. if pen == nil {
  104. continue
  105. }
  106. if err := s.DB.Model(new(model.Cow)).
  107. Where("id = ?", v.Id).
  108. Update("pen_name", pen.Name).Error; err != nil {
  109. zaplog.Error("UpdateCowPen", zap.Any("error", err))
  110. }
  111. }
  112. return nil
  113. }
  114. func (s *StoreEntry) PastureInit(ctx context.Context, pastureId int64) error {
  115. if pastureId <= 0 {
  116. return xerr.New("pastureId invalid")
  117. }
  118. pasture := &model.AppPastureList{}
  119. if err := s.DB.Model(new(model.AppPastureList)).
  120. Where("id = ?", pastureId).
  121. First(pasture).Error; err != nil {
  122. return xerr.Customf("该牧场不存在:%d", pastureId)
  123. }
  124. deptList := make([]*model.SystemDept, 0)
  125. if err := s.DB.Model(new(model.SystemDept)).
  126. Where("id = ?", pasture.Id).
  127. Find(&deptList).Error; err != nil {
  128. return xerr.Customf("牧场初始化数据失败:%s", err.Error())
  129. }
  130. if len(deptList) > 0 {
  131. return xerr.Customf("该牧场已初始化:%d", pastureId)
  132. }
  133. dataWaringTypeEnumList := s.DataWaringTypeEnumList("all")
  134. dataWarningList := model.DataWarningInitData(pastureId, dataWaringTypeEnumList)
  135. if err := s.DB.Transaction(func(tx *gorm.DB) error {
  136. for _, dataWarning := range dataWarningList {
  137. if err := tx.Model(new(model.DataWarning)).
  138. Create(dataWarning).Error; err != nil {
  139. zaplog.Error("PastureInit-DataWarning", zap.Any("error", err))
  140. }
  141. dataWarningItemsList := model.DataWarningItemsInitData(pastureId, dataWarning)
  142. if err := tx.Model(new(model.DataWarningItems)).
  143. Create(dataWarningItemsList).Error; err != nil {
  144. zaplog.Error("PastureInit-DataWarningItems", zap.Any("error", err))
  145. }
  146. }
  147. nackRingConfigureList := model.NeckRingConfigureInit(pastureId)
  148. if err := tx.Model(new(model.NeckRingConfigure)).
  149. Create(nackRingConfigureList).Error; err != nil {
  150. zaplog.Error("PastureInit-NeckRingConfigure", zap.Any("error", err))
  151. }
  152. // 初始化牧场和部门数据
  153. newSystemPastureDept := model.NewSystemPastureDeptInit(pasture)
  154. if err := tx.Model(new(model.SystemDept)).
  155. Create(newSystemPastureDept).Error; err != nil {
  156. zaplog.Error("PastureInit-SystemDept", zap.Any("error", err))
  157. }
  158. newSystemDept := model.NewSystemDeptInit(pasture.Id, newSystemPastureDept.Id)
  159. if err := tx.Model(new(model.SystemDept)).
  160. Create(newSystemDept).Error; err != nil {
  161. zaplog.Error("PastureInit-SystemDept", zap.Any("error", err))
  162. }
  163. return nil
  164. }); err != nil {
  165. return xerr.WithStack(err)
  166. }
  167. return nil
  168. }
  169. func (s *StoreEntry) AdmissionAge(ctx context.Context) error {
  170. /*for k, v := range admissionAgeMap {
  171. cowInfo, err := s.GetCowInfoByEarNumber(ctx, 4, k)
  172. if err != nil {
  173. zaplog.Error("CalvingAge", zap.Any("k", k), zap.Any("v", v), zap.Any("err", err))
  174. continue
  175. }
  176. admissionAt, _ := util.TimeParseLocal(model.LayoutTime2, v)
  177. if !admissionAt.IsZero() {
  178. cowInfo.AdmissionAt = admissionAt.Unix()
  179. cowInfo.AdmissionAge = cowInfo.GetAdmissionAge()
  180. if err = s.DB.Model(new(model.Cow)).
  181. Where("id = ?", cowInfo.Id).
  182. Updates(map[string]interface{}{
  183. "admission_at": cowInfo.AdmissionAt,
  184. "admission_age": cowInfo.AdmissionAge,
  185. }).Error; err != nil {
  186. zaplog.Error("CalvingAge", zap.Any("err", err))
  187. }
  188. }
  189. }*/
  190. return nil
  191. }
  192. func (s *StoreEntry) CalvingAge(ctx context.Context) error {
  193. /*for k, v := range calvingAgeMap {
  194. if v == "" {
  195. continue
  196. }
  197. cowInfo, err := s.GetCowInfoByEarNumber(ctx, 4, k)
  198. if err != nil {
  199. zaplog.Error("CalvingAge", zap.Any("k", k), zap.Any("v", v), zap.Any("err", err))
  200. continue
  201. }
  202. calvingAt, _ := util.TimeParseLocal(model.LayoutTime2, v)
  203. if !calvingAt.IsZero() {
  204. cowInfo.LastCalvingAt = calvingAt.Unix()
  205. cowInfo.LactationAge = cowInfo.GetLactationDays()
  206. if err = s.DB.Model(new(model.Cow)).
  207. Where("id = ?", cowInfo.Id).
  208. Updates(map[string]interface{}{
  209. "last_calving_at": cowInfo.LastCalvingAt,
  210. "lactation_age": cowInfo.LactationAge,
  211. }).Error; err != nil {
  212. zaplog.Error("CalvingAge", zap.Any("err", err))
  213. }
  214. }
  215. }*/
  216. return nil
  217. }