goods.go 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. package backend
  2. import (
  3. "context"
  4. "fmt"
  5. "kpt-pasture/model"
  6. "net/http"
  7. "time"
  8. "gorm.io/gorm"
  9. "gitee.com/xuyiping_admin/pkg/xerr"
  10. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  11. )
  12. func (s *StoreEntry) DrugsList(ctx context.Context, req *pasturePb.SearchDrugsRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchDrugsResponse, error) {
  13. drugsList := make([]*model.Drugs, 0)
  14. var count int64 = 0
  15. pref := s.DB.Model(new(model.Drugs))
  16. if req.Name != "" {
  17. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  18. }
  19. if req.Usage > 0 {
  20. pref.Where("usage_method = ?", req.Usage)
  21. }
  22. if req.CategoryId > 0 {
  23. pref.Where("category_id = ?", req.CategoryId)
  24. }
  25. if err := pref.Order("id desc").Count(&count).Limit(int(pagination.PageSize)).Offset(int(pagination.PageOffset)).
  26. Find(&drugsList).Error; err != nil {
  27. return nil, xerr.WithStack(err)
  28. }
  29. return &pasturePb.SearchDrugsResponse{
  30. Code: http.StatusOK,
  31. Message: "ok",
  32. Data: &pasturePb.SearchDrugsData{
  33. List: model.DrugsSlice(drugsList).ToPB(),
  34. Total: int32(count),
  35. PageSize: pagination.PageSize,
  36. Page: pagination.Page,
  37. },
  38. }, nil
  39. }
  40. func (s *StoreEntry) DrugsCreateOrUpdate(ctx context.Context, req *pasturePb.SearchDrugsList) error {
  41. currentUser, err := s.GetCurrentSystemUser(ctx)
  42. if err != nil {
  43. return xerr.Custom("登录人信息失效")
  44. }
  45. req.CategoryName = s.DrugCategoryMaps()[req.CategoryId]
  46. req.UnitName = s.UnitMap()[req.Unit]
  47. req.UnitName = s.DrugUsageMaps()[req.Usage]
  48. newDrugs := model.NewDrugs(req, currentUser)
  49. if req.Id <= 0 {
  50. if err = s.DB.Create(newDrugs).Error; err != nil {
  51. return xerr.WithStack(err)
  52. }
  53. } else {
  54. if err = s.DB.Where("id = ?", req.Id).Updates(newDrugs).Error; err != nil {
  55. return xerr.WithStack(err)
  56. }
  57. }
  58. return nil
  59. }
  60. func (s *StoreEntry) MedicalEquipmentList(ctx context.Context, req *pasturePb.SearchMedicalEquipmentRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchMedicalEquipmentResponse, error) {
  61. medicalEquipmentList := make([]*model.MedicalEquipment, 0)
  62. var count int64 = 0
  63. pref := s.DB.Model(new(model.MedicalEquipment))
  64. if req.Name != "" {
  65. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  66. }
  67. if err := pref.Order("id desc").Count(&count).Limit(int(pagination.PageSize)).Offset(int(pagination.PageOffset)).
  68. Find(&medicalEquipmentList).Error; err != nil {
  69. return nil, xerr.WithStack(err)
  70. }
  71. unitMap := s.UnitMap()
  72. return &pasturePb.SearchMedicalEquipmentResponse{
  73. Code: http.StatusOK,
  74. Message: "ok",
  75. Data: &pasturePb.SearchMedicalEquipmentData{
  76. List: model.MedicalEquipmentSlice(medicalEquipmentList).ToPB(unitMap),
  77. Total: int32(count),
  78. PageSize: pagination.PageSize,
  79. Page: pagination.Page,
  80. },
  81. }, nil
  82. }
  83. func (s *StoreEntry) MedicalEquipmentCreateOrUpdate(ctx context.Context, req *pasturePb.SearchMedicalEquipmentList) error {
  84. currentUser, err := s.GetCurrentSystemUser(ctx)
  85. if err != nil {
  86. return xerr.Custom("登录人信息失效")
  87. }
  88. newDrugs := model.NewMedicalEquipment(req, currentUser)
  89. if req.Id <= 0 {
  90. if err = s.DB.Create(newDrugs).Error; err != nil {
  91. return xerr.WithStack(err)
  92. }
  93. } else {
  94. if err = s.DB.Where("id = ?", req.Id).Updates(newDrugs).Error; err != nil {
  95. return xerr.WithStack(err)
  96. }
  97. }
  98. return nil
  99. }
  100. func (s *StoreEntry) NeckRingLogCreateOrUpdate(ctx context.Context, req *pasturePb.NeckRingCreateRequest) error {
  101. currentUser, err := s.GetCurrentSystemUser(ctx)
  102. if err != nil {
  103. return xerr.Custom("登录人信息失效")
  104. }
  105. if req.Items == nil || len(req.Items) == 0 {
  106. return xerr.Custom("请选择要脖环数据")
  107. }
  108. newNeckRingLogList := model.NewNeckRingLogList(req.Items, currentUser)
  109. cowIds := make([]int64, 0)
  110. for _, v := range newNeckRingLogList {
  111. cowIds = append(cowIds, v.CowId)
  112. }
  113. if err = s.DB.Transaction(func(tx *gorm.DB) error {
  114. // 解绑脖环号
  115. if err = tx.Model(new(model.NeckRingLog)).
  116. Where("cowId IN ?", cowIds).
  117. Updates(map[string]interface{}{
  118. "unbind_at": time.Now().Unix(),
  119. "status": pasturePb.NeckRingStatus_Unbind,
  120. "operation_id": currentUser.Id,
  121. "operation_name": currentUser.Name,
  122. }).Error; err != nil {
  123. return xerr.WithStack(err)
  124. }
  125. // 绑定新脖环
  126. if err = tx.Create(newNeckRingLogList).Error; err != nil {
  127. return xerr.WithStack(err)
  128. }
  129. for _, v := range req.Items {
  130. if v.CowId > 0 {
  131. if err = tx.Model(new(model.Cow)).
  132. Where("id = ?", v.CowId).
  133. Where("admission_status = ?", pasturePb.AdmissionStatus_Admission).
  134. Updates(map[string]interface{}{
  135. "neck_ring_number": v.Number,
  136. }).Error; err != nil {
  137. return xerr.WithStack(err)
  138. }
  139. }
  140. }
  141. return nil
  142. }); err != nil {
  143. return xerr.WithStack(err)
  144. }
  145. return nil
  146. }
  147. func (s *StoreEntry) NeckRingLogList(ctx context.Context, req *pasturePb.SearchNeckRingRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchNeckRingResponse, error) {
  148. neckRingLogList := make([]*model.NeckRingLog, 0)
  149. var count int64 = 0
  150. pref := s.DB.Model(new(model.NeckRingLog)).Where("status > ?", pasturePb.NeckRingStatus_Unbind)
  151. if req.Status > 0 {
  152. pref.Where("status = ?", req.Status)
  153. }
  154. if req.CowId > 0 {
  155. pref.Where("cow_id = ?", req.CowId)
  156. }
  157. if req.Number != "" {
  158. pref.Where("number like ?", fmt.Sprintf("%s%s%s", "%", req.Number, "%"))
  159. }
  160. if err := pref.Order("id desc").
  161. Count(&count).
  162. Limit(int(pagination.PageSize)).
  163. Offset(int(pagination.PageOffset)).
  164. Find(&neckRingLogList).Error; err != nil {
  165. return nil, xerr.WithStack(err)
  166. }
  167. neckRingStatusMap := s.NeckRingStatusMap()
  168. return &pasturePb.SearchNeckRingResponse{
  169. Code: http.StatusOK,
  170. Message: "ok",
  171. Data: &pasturePb.SearchNeckRingData{
  172. List: model.NeckRingLogSlice(neckRingLogList).ToPB(neckRingStatusMap),
  173. Total: int32(count),
  174. PageSize: pagination.PageSize,
  175. Page: pagination.Page,
  176. },
  177. }, nil
  178. }