pasture.go 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514
  1. package backend
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "kpt-pasture/model"
  7. "net/http"
  8. "github.com/nicksnyder/go-i18n/v2/i18n"
  9. "gitee.com/xuyiping_admin/pkg/xerr"
  10. "gorm.io/gorm"
  11. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  12. )
  13. func (s *StoreEntry) SearchBarnList(ctx context.Context, req *pasturePb.SearchNameRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchBarnResponse, error) {
  14. userModel, err := s.GetUserModel(ctx)
  15. if err != nil {
  16. return nil, xerr.WithStack(err)
  17. }
  18. penList := make([]*model.Pen, 0)
  19. var count int64 = 0
  20. pref := s.DB.Model(new(model.Pen)).
  21. Where("is_delete = ?", pasturePb.IsShow_Ok).
  22. Where("pasture_id = ?", userModel.AppPasture.Id)
  23. if req.Name != "" {
  24. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  25. }
  26. if err = pref.Order("id desc").
  27. Count(&count).
  28. Limit(int(pagination.PageSize)).
  29. Offset(int(pagination.PageOffset)).
  30. Find(&penList).Error; err != nil {
  31. return nil, xerr.WithStack(err)
  32. }
  33. //configBarnTypeList := make([]*model.ConfigPenType, 0)
  34. barnTypeMap := s.BarnTypeMap()
  35. return &pasturePb.SearchBarnResponse{
  36. Code: http.StatusOK,
  37. Msg: "ok",
  38. Data: &pasturePb.SearchBarnData{
  39. List: model.PenSlice(penList).ToPB(barnTypeMap),
  40. Total: int32(count),
  41. PageSize: pagination.PageSize,
  42. Page: pagination.Page,
  43. },
  44. }, nil
  45. }
  46. func (s *StoreEntry) CreateOrUpdateBarn(ctx context.Context, req *pasturePb.SearchBarnList) error {
  47. userModel, err := s.GetUserModel(ctx)
  48. if err != nil {
  49. return xerr.WithStack(err)
  50. }
  51. if req.Id > 0 {
  52. barn := &model.Pen{Id: req.Id}
  53. if err = s.DB.Model(&model.Pen{}).First(barn).Error; err != nil {
  54. if !errors.Is(err, gorm.ErrRecordNotFound) {
  55. return xerr.WithStack(err)
  56. }
  57. }
  58. }
  59. if err = s.DB.Model(&model.Pen{}).Where(map[string]interface{}{
  60. "id": req.Id,
  61. "pasture_id": userModel.AppPasture.Id,
  62. }).Assign(map[string]interface{}{
  63. "name": req.Name,
  64. "remarks": req.Remarks,
  65. "pen_type": req.BarnTypeId,
  66. "lengths": req.Lengths,
  67. "widths": req.Widths,
  68. "doctrinal_capacity": req.DoctrinalCapacity,
  69. "bed_number": req.BedNumber,
  70. "neck_number": req.NeckNumber,
  71. "pasture_id": userModel.AppPasture.Id,
  72. "is_delete": pasturePb.IsShow_Ok,
  73. "is_show": pasturePb.IsShow_Ok,
  74. }).FirstOrCreate(&model.Pen{}).Error; err != nil {
  75. return xerr.WithStack(err)
  76. }
  77. return nil
  78. }
  79. func (s *StoreEntry) SearchBarnTypeList(ctx context.Context, req *pasturePb.SearchNameRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchBaseConfigResponse, error) {
  80. barnTypeList := make([]*model.ConfigPenType, 0)
  81. var count int64 = 0
  82. pref := s.DB.Model(new(model.ConfigPenType))
  83. if req.Name != "" {
  84. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  85. }
  86. if err := pref.Order("id desc").Count(&count).Limit(int(pagination.PageSize)).Offset(int(pagination.PageOffset)).
  87. Find(&barnTypeList).Error; err != nil {
  88. return nil, xerr.WithStack(err)
  89. }
  90. return &pasturePb.SearchBaseConfigResponse{
  91. Code: http.StatusOK,
  92. Msg: "ok",
  93. Data: &pasturePb.SearchBaseConfigData{
  94. List: model.ConfigBarnTypeSlice(barnTypeList).ToPB(),
  95. Total: int32(count),
  96. PageSize: pagination.PageSize,
  97. Page: pagination.Page,
  98. },
  99. }, nil
  100. }
  101. func (s *StoreEntry) CreateOrUpdateBarnType(ctx context.Context, req *pasturePb.SearchBaseConfigList) error {
  102. if req.Id > 0 {
  103. barn := &model.ConfigPenType{Id: int64(req.Id)}
  104. if err := s.DB.Model(&model.ConfigPenType{}).First(barn).Error; err != nil {
  105. if !errors.Is(err, gorm.ErrRecordNotFound) {
  106. return xerr.WithStack(err)
  107. }
  108. }
  109. }
  110. if err := s.DB.Model(&model.ConfigPenType{}).Where(map[string]interface{}{
  111. "id": req.Id,
  112. }).Assign(map[string]interface{}{
  113. "name": req.Name,
  114. "remarks": req.Remarks,
  115. "is_show": pasturePb.IsShow_Ok,
  116. }).FirstOrCreate(&model.ConfigPenType{}).Error; err != nil {
  117. return xerr.WithStack(err)
  118. }
  119. return nil
  120. }
  121. func (s *StoreEntry) SearchBreedStatusList(ctx context.Context, req *pasturePb.SearchNameRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchBaseConfigResponse, error) {
  122. userModel, err := s.GetUserModel(ctx)
  123. if err != nil {
  124. return nil, xerr.WithStack(err)
  125. }
  126. breedStatusList := make([]*model.ConfigBreedStatus, 0)
  127. var count int64 = 0
  128. pref := s.DB.Model(new(model.ConfigBreedStatus))
  129. if req.Name != "" {
  130. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  131. }
  132. if err := pref.Order("id desc").Count(&count).Limit(int(pagination.PageSize)).Offset(int(pagination.PageOffset)).
  133. Find(&breedStatusList).Error; err != nil {
  134. return nil, xerr.WithStack(err)
  135. }
  136. return &pasturePb.SearchBaseConfigResponse{
  137. Code: http.StatusOK,
  138. Msg: "ok",
  139. Data: &pasturePb.SearchBaseConfigData{
  140. List: model.ConfigBreedStatusSlice(breedStatusList).ToPB(userModel.Language),
  141. Total: int32(count),
  142. PageSize: pagination.PageSize,
  143. Page: pagination.Page,
  144. },
  145. }, nil
  146. }
  147. func (s *StoreEntry) CreateOrUpdateBreedStatus(ctx context.Context, req *pasturePb.SearchBaseConfigList) error {
  148. if req.Id > 0 {
  149. barn := &model.ConfigBreedStatus{Id: int64(req.Id)}
  150. if err := s.DB.Model(&model.ConfigBreedStatus{}).First(barn).Error; err != nil {
  151. if !errors.Is(err, gorm.ErrRecordNotFound) {
  152. return xerr.WithStack(err)
  153. }
  154. }
  155. }
  156. if err := s.DB.Model(&model.ConfigBreedStatus{}).Where(map[string]interface{}{
  157. "id": req.Id,
  158. }).Assign(map[string]interface{}{
  159. "name": req.Name,
  160. "remarks": req.Remarks,
  161. "is_show": pasturePb.IsShow_Ok,
  162. }).FirstOrCreate(&model.ConfigBreedStatus{}).Error; err != nil {
  163. return xerr.WithStack(err)
  164. }
  165. return nil
  166. }
  167. func (s *StoreEntry) SearchCowKindList(ctx context.Context, req *pasturePb.SearchNameRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchBaseConfigResponse, error) {
  168. configCowKindList := make([]*model.ConfigCowKind, 0)
  169. var count int64 = 0
  170. pref := s.DB.Model(new(model.ConfigCowKind))
  171. if req.Name != "" {
  172. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  173. }
  174. if err := pref.Order("id desc").Count(&count).Limit(int(pagination.PageSize)).Offset(int(pagination.PageOffset)).
  175. Find(&configCowKindList).Error; err != nil {
  176. return nil, xerr.WithStack(err)
  177. }
  178. return &pasturePb.SearchBaseConfigResponse{
  179. Code: http.StatusOK,
  180. Msg: "ok",
  181. Data: &pasturePb.SearchBaseConfigData{
  182. List: model.ConfigCowKindSlice(configCowKindList).ToPB(),
  183. Total: int32(count),
  184. PageSize: pagination.PageSize,
  185. Page: pagination.Page,
  186. },
  187. }, nil
  188. }
  189. func (s *StoreEntry) CreateOrUpdateCowKind(ctx context.Context, req *pasturePb.SearchBaseConfigList) error {
  190. if req.Id > 0 {
  191. barn := &model.ConfigCowKind{Id: int64(req.Id)}
  192. if err := s.DB.Model(&model.ConfigCowKind{}).First(barn).Error; err != nil {
  193. if !errors.Is(err, gorm.ErrRecordNotFound) {
  194. return xerr.WithStack(err)
  195. }
  196. }
  197. }
  198. if err := s.DB.Model(&model.ConfigCowKind{}).Where(map[string]interface{}{
  199. "id": req.Id,
  200. }).Assign(map[string]interface{}{
  201. "name": req.Name,
  202. "remarks": req.Remarks,
  203. "is_show": pasturePb.IsShow_Ok,
  204. }).FirstOrCreate(&model.ConfigCowKind{}).Error; err != nil {
  205. return xerr.WithStack(err)
  206. }
  207. return nil
  208. }
  209. func (s *StoreEntry) SearchCowStatusList(ctx context.Context, req *pasturePb.SearchNameRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchBaseConfigResponse, error) {
  210. configCowStatusList := make([]*model.ConfigCowStatus, 0)
  211. var count int64 = 0
  212. pref := s.DB.Model(new(model.ConfigCowStatus))
  213. if req.Name != "" {
  214. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  215. }
  216. if err := pref.Order("id desc").Count(&count).Limit(int(pagination.PageSize)).Offset(int(pagination.PageOffset)).
  217. Find(&configCowStatusList).Error; err != nil {
  218. return nil, xerr.WithStack(err)
  219. }
  220. return &pasturePb.SearchBaseConfigResponse{
  221. Code: http.StatusOK,
  222. Msg: "ok",
  223. Data: &pasturePb.SearchBaseConfigData{
  224. List: model.ConfigCowStatusSlice(configCowStatusList).ToPB(),
  225. Total: int32(count),
  226. PageSize: pagination.PageSize,
  227. Page: pagination.Page,
  228. },
  229. }, nil
  230. }
  231. func (s *StoreEntry) CreateOrUpdateCowStatus(ctx context.Context, req *pasturePb.SearchBaseConfigList) error {
  232. if req.Id > 0 {
  233. barn := &model.ConfigCowStatus{Id: int64(req.Id)}
  234. if err := s.DB.Model(&model.ConfigCowStatus{}).First(barn).Error; err != nil {
  235. if !errors.Is(err, gorm.ErrRecordNotFound) {
  236. return xerr.WithStack(err)
  237. }
  238. }
  239. }
  240. if err := s.DB.Model(&model.ConfigCowStatus{}).Where(map[string]interface{}{
  241. "id": req.Id,
  242. }).Assign(map[string]interface{}{
  243. "name": req.Name,
  244. "remarks": req.Remarks,
  245. "is_show": pasturePb.IsShow_Ok,
  246. }).FirstOrCreate(&model.ConfigCowStatus{}).Error; err != nil {
  247. return xerr.WithStack(err)
  248. }
  249. return nil
  250. }
  251. func (s *StoreEntry) SearchCowTypeList(ctx context.Context, req *pasturePb.SearchNameRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchBaseConfigResponse, error) {
  252. configCowTypeList := make([]*model.ConfigCowType, 0)
  253. var count int64 = 0
  254. pref := s.DB.Model(new(model.ConfigCowType))
  255. if req.Name != "" {
  256. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  257. }
  258. if err := pref.Order("id desc").Count(&count).Limit(int(pagination.PageSize)).Offset(int(pagination.PageOffset)).
  259. Find(&configCowTypeList).Error; err != nil {
  260. return nil, xerr.WithStack(err)
  261. }
  262. return &pasturePb.SearchBaseConfigResponse{
  263. Code: http.StatusOK,
  264. Msg: "ok",
  265. Data: &pasturePb.SearchBaseConfigData{
  266. List: model.ConfigCowTypeSlice(configCowTypeList).ToPB(),
  267. Total: int32(count),
  268. PageSize: pagination.PageSize,
  269. Page: pagination.Page,
  270. },
  271. }, nil
  272. }
  273. func (s *StoreEntry) CreateOrUpdateCowType(ctx context.Context, req *pasturePb.SearchBaseConfigList) error {
  274. if req.Id > 0 {
  275. barn := &model.ConfigCowType{Id: int64(req.Id)}
  276. if err := s.DB.Model(&model.ConfigCowType{}).First(barn).Error; err != nil {
  277. if !errors.Is(err, gorm.ErrRecordNotFound) {
  278. return xerr.WithStack(err)
  279. }
  280. }
  281. }
  282. if err := s.DB.Model(&model.ConfigCowType{}).Where(map[string]interface{}{
  283. "id": req.Id,
  284. }).Assign(map[string]interface{}{
  285. "name": req.Name,
  286. "remarks": req.Remarks,
  287. "is_show": pasturePb.IsShow_Ok,
  288. }).FirstOrCreate(&model.ConfigCowType{}).Error; err != nil {
  289. return xerr.WithStack(err)
  290. }
  291. return nil
  292. }
  293. func (s *StoreEntry) SearchTransferPenReasonList(ctx context.Context, req *pasturePb.SearchNameRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchBaseConfigResponse, error) {
  294. configTransferPenReasonList := make([]*model.ConfigTransferPenReason, 0)
  295. var count int64 = 0
  296. pref := s.DB.Model(new(model.ConfigTransferPenReason))
  297. if req.Name != "" {
  298. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  299. }
  300. if err := pref.Order("id desc").Count(&count).Limit(int(pagination.PageSize)).Offset(int(pagination.PageOffset)).
  301. Find(&configTransferPenReasonList).Error; err != nil {
  302. return nil, xerr.WithStack(err)
  303. }
  304. return &pasturePb.SearchBaseConfigResponse{
  305. Code: http.StatusOK,
  306. Msg: "ok",
  307. Data: &pasturePb.SearchBaseConfigData{
  308. List: model.ConfigTransferPenReasonSlice(configTransferPenReasonList).ToPB(),
  309. Total: int32(count),
  310. PageSize: pagination.PageSize,
  311. Page: pagination.Page,
  312. },
  313. }, nil
  314. }
  315. func (s *StoreEntry) CreateOrUpdateTransferPenReason(ctx context.Context, req *pasturePb.SearchBaseConfigList) error {
  316. if req.Id > 0 {
  317. barn := &model.ConfigTransferPenReason{Id: int64(req.Id)}
  318. if err := s.DB.Model(&model.ConfigTransferPenReason{}).First(barn).Error; err != nil {
  319. if !errors.Is(err, gorm.ErrRecordNotFound) {
  320. return xerr.WithStack(err)
  321. }
  322. }
  323. }
  324. if err := s.DB.Model(&model.ConfigTransferPenReason{}).Where(map[string]interface{}{
  325. "id": req.Id,
  326. }).Assign(map[string]interface{}{
  327. "name": req.Name,
  328. "remarks": req.Remarks,
  329. "is_show": pasturePb.IsShow_Ok,
  330. }).FirstOrCreate(&model.ConfigTransferPenReason{}).Error; err != nil {
  331. return xerr.WithStack(err)
  332. }
  333. return nil
  334. }
  335. func (s *StoreEntry) SearchCowSourceList(ctx context.Context, req *pasturePb.SearchNameRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchBaseConfigResponse, error) {
  336. configCowSourceList := make([]*model.ConfigCowSource, 0)
  337. var count int64 = 0
  338. pref := s.DB.Model(new(model.ConfigCowSource))
  339. if req.Name != "" {
  340. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  341. }
  342. if err := pref.Order("id desc").Count(&count).Limit(int(pagination.PageSize)).Offset(int(pagination.PageOffset)).
  343. Find(&configCowSourceList).Error; err != nil {
  344. return nil, xerr.WithStack(err)
  345. }
  346. return &pasturePb.SearchBaseConfigResponse{
  347. Code: http.StatusOK,
  348. Msg: "ok",
  349. Data: &pasturePb.SearchBaseConfigData{
  350. List: model.ConfigCowSourceSlice(configCowSourceList).ToPB(),
  351. Total: int32(count),
  352. PageSize: pagination.PageSize,
  353. Page: pagination.Page,
  354. },
  355. }, nil
  356. }
  357. func (s *StoreEntry) CreateOrUpdateCowSource(ctx context.Context, req *pasturePb.SearchBaseConfigList) error {
  358. if req.Id > 0 {
  359. barn := &model.ConfigCowSource{Id: int64(req.Id)}
  360. if err := s.DB.Model(&model.ConfigCowSource{}).First(barn).Error; err != nil {
  361. if !errors.Is(err, gorm.ErrRecordNotFound) {
  362. return xerr.WithStack(err)
  363. }
  364. }
  365. }
  366. if err := s.DB.Model(&model.ConfigCowSource{}).Where(map[string]interface{}{
  367. "id": req.Id,
  368. }).Assign(map[string]interface{}{
  369. "name": req.Name,
  370. "remarks": req.Remarks,
  371. "is_show": pasturePb.IsShow_Ok,
  372. }).FirstOrCreate(&model.ConfigCowSource{}).Error; err != nil {
  373. return xerr.WithStack(err)
  374. }
  375. return nil
  376. }
  377. func (s *StoreEntry) CreateOrUpdateDealer(crx context.Context, req *pasturePb.DealerItem) error {
  378. userModel, err := s.GetUserModel(crx)
  379. if err != nil {
  380. return xerr.WithStack(err)
  381. }
  382. if req.Id > 0 {
  383. saleDealer := &model.SaleDealer{Id: req.Id}
  384. if err = s.DB.Model(new(model.SaleDealer)).First(saleDealer).Error; err != nil {
  385. if !errors.Is(err, gorm.ErrRecordNotFound) {
  386. return xerr.WithStack(err)
  387. }
  388. }
  389. }
  390. if err = s.DB.Model(new(model.SaleDealer)).
  391. Where(map[string]interface{}{
  392. "id": req.Id,
  393. "pasture_id": userModel.AppPasture.Id,
  394. }).Assign(map[string]interface{}{
  395. "contacts": req.Contacts,
  396. "phone": req.Phone,
  397. "name": req.Name,
  398. "remarks": req.Remarks,
  399. "is_show": pasturePb.IsShow_Ok,
  400. }).FirstOrCreate(new(model.SaleDealer)).Error; err != nil {
  401. return xerr.WithStack(err)
  402. }
  403. return nil
  404. }
  405. func (s *StoreEntry) SearchDealerList(crx context.Context, req *pasturePb.SearchNameRequest) (*pasturePb.SearchDealerResponse, error) {
  406. userModel, err := s.GetUserModel(crx)
  407. if err != nil {
  408. return nil, xerr.WithStack(err)
  409. }
  410. saleDealerList := make([]*model.SaleDealer, 0)
  411. pref := s.DB.Model(new(model.SaleDealer)).
  412. Where("pasture_id = ?", userModel.AppPasture.Id)
  413. if req.Name != "" {
  414. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  415. }
  416. if err = pref.Where("is_show = ?", pasturePb.IsShow_Ok).Find(&saleDealerList).Error; err != nil {
  417. return nil, xerr.WithStack(err)
  418. }
  419. return &pasturePb.SearchDealerResponse{
  420. Code: http.StatusOK,
  421. Msg: "ok",
  422. Data: &pasturePb.SearchDealerData{
  423. List: model.SaleDealerSlice(saleDealerList).ToPB(),
  424. },
  425. }, nil
  426. }
  427. func (s *StoreEntry) DeleteDealer(crx context.Context, id int64) error {
  428. userModel, err := s.GetUserModel(crx)
  429. if err != nil {
  430. return xerr.WithStack(err)
  431. }
  432. saleDealer := &model.SaleDealer{}
  433. if err = s.DB.Model(new(model.SaleDealer)).
  434. Where("id = ? and pasture_id = ?", id, userModel.AppPasture.Id).
  435. First(saleDealer).Error; err != nil {
  436. if errors.Is(err, gorm.ErrRecordNotFound) {
  437. messageId, _ := userModel.LanguageContent.Localize(&i18n.LocalizeConfig{
  438. MessageID: "pasture.dealerNotExist",
  439. })
  440. return xerr.Custom(messageId)
  441. }
  442. return xerr.WithStack(err)
  443. }
  444. if err = s.DB.Model(new(model.SaleDealer)).
  445. Where("id = ? and pasture_id = ?", saleDealer.Id, userModel.AppPasture.Id).
  446. Update("is_show", pasturePb.IsShow_No).Error; err != nil {
  447. return xerr.WithStack(err)
  448. }
  449. return nil
  450. }