fapiao_service.go 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package service
  2. import (
  3. "XT_New/models"
  4. "fmt"
  5. "strings"
  6. )
  7. func FindFaPiaoConfigInfo(org_id int64) (config models.FapiaoConfig, err error) {
  8. err = readDb.Model(&models.FapiaoConfig{}).Where("status = 1 AND user_org_id = ?", org_id).First(&config).Error
  9. return
  10. }
  11. func GetFaPiaoSettleList(user_org_id int64, page int64, limit int64, start_time_timestamp int64, end_time_timestamp int64, sort_type int64, start_time string, end_time string, is_open_fapiao int64, patient_id int64, keywords string) (order []*models.HisOrderByFaPiao, err error, total int64) {
  12. offset := (page - 1) * limit
  13. keywords = "%" + keywords + "%"
  14. db := readDb.Model(&models.HisOrderByFaPiao{})
  15. if len(keywords) > 0 {
  16. db = db.Joins("join xt_patients on xt_patients.id = his_order.patient_id and xt_patients.name like ?", keywords)
  17. }
  18. // Join the patients table based on user_org_id
  19. db = db.Joins("join xt_patients as patient on patient.id = his_order.patient_id and patient.user_org_id = ?", user_org_id)
  20. // Handle the is_open_fapiao logic
  21. if is_open_fapiao == 1 {
  22. // is_open_fapiao == 1: Look for orders with a corresponding fa_piao_number
  23. db = db.Joins("left join his_fapiao_order as fo on fo.ticket_sn = his_order.fa_piao_number and fo.user_org_id = ?", user_org_id).
  24. Where("fo.id IS NOT NULL") // Ensure fa_piao_number exists
  25. } else if is_open_fapiao == 2 {
  26. // is_open_fapiao == 2: Look for orders without a corresponding fa_piao_number
  27. db = db.Joins("left join his_fapiao_order as fo on fo.ticket_sn = his_order.fa_piao_number and fo.user_org_id = ?", user_org_id).
  28. Where("fo.id IS NULL") // Ensure fa_piao_number does not exist
  29. }
  30. // Handle sorting logic
  31. if sort_type == 1 {
  32. if start_time_timestamp != 0 {
  33. db = db.Where("his_order.settle_accounts_date >= ?", start_time_timestamp)
  34. }
  35. if end_time_timestamp != 0 {
  36. db = db.Where("his_order.settle_accounts_date <= ?", end_time_timestamp)
  37. }
  38. } else {
  39. if len(start_time) != 0 {
  40. db = db.Where("his_order.setl_time >= ?", start_time+" 00:00:00")
  41. }
  42. if len(end_time) != 0 {
  43. db = db.Where("his_order.setl_time <= ?", end_time+" 23:59:59")
  44. }
  45. }
  46. if patient_id > 0 {
  47. db = db.Where("his_order.patient_id = ?", patient_id)
  48. }
  49. db = db.Where("his_order.status = 1 and his_order.order_status = 2")
  50. // Preload related data
  51. db = db.Preload("Patients", "status = 1 AND user_org_id = ?", user_org_id).
  52. Preload("HisPatient", "status = 1 AND user_org_id = ?", user_org_id).
  53. Preload("HisFaPiaoOrder", "status = 1")
  54. // Count the total number of records
  55. db = db.Count(&total)
  56. // Apply pagination
  57. db = db.Limit(limit).Offset(offset)
  58. // Execute query and return results
  59. err = db.Find(&order).Error
  60. //
  61. //for _, item := range order {
  62. // var hfpo models.HisFaPiaoOrder
  63. // readDb.Model(&models.HisFaPiaoOrder{}).Where("ticket_sn = ?", item.FaPiaoNumber).First(&hfpo)
  64. // item.HisFaPiaoOrder =
  65. //}
  66. return
  67. }
  68. func GetFaPiaoList(user_org_id int64, page int64, limit int64, start_time_timestamp int64, end_time_timestamp int64, keywords string) (order []*models.HisFaPiaoOrder, err error, total int64) {
  69. offset := (page - 1) * limit
  70. //keywords = "%" + keywords + "%"
  71. db := readDb.Model(&models.HisFaPiaoOrder{})
  72. db = db.Preload("Patients", "status = 1 AND user_org_id = ?", user_org_id)
  73. db = db.Where("ctime >= ? and ctime <= ? and user_org_id = ? and status = 1 and pdf_url <> ''", start_time_timestamp, end_time_timestamp, user_org_id)
  74. // Count the total number of records
  75. db = db.Count(&total)
  76. // Apply pagination
  77. db = db.Limit(limit).Offset(offset)
  78. // Execute query and return results
  79. err = db.Find(&order).Error
  80. for _, item := range order {
  81. var os []*models.SettleAccountsDateOrder
  82. order_ids := strings.Split(item.OrderIds, ",")
  83. err := readDb.Model(&models.SettleAccountsDateOrder{}).Where("id in (?)", order_ids).Find(&os).Error
  84. if err == nil {
  85. item.SettleAccountsDateOrder = append(item.SettleAccountsDateOrder, os...)
  86. }
  87. }
  88. return
  89. }
  90. func GetFaPiaoOrderByIDS(ids []string) (orders []models.HisOrder, err error) {
  91. err = readDb.Model(&models.HisOrder{}).Where("id in (?) AND status = 1", ids).Find(&orders).Error
  92. return
  93. }
  94. func GetFaPiaoOrderById(id int64) (orders models.HisFaPiaoOrder, err error) {
  95. err = readDb.Model(&models.HisFaPiaoOrder{}).Where("id = ?", id).Find(&orders).Error
  96. return
  97. }
  98. func GetFaPiaoOrderInfoByNumbers(numbers []string) (infos []models.HisOrderInfo, err error) {
  99. err = readDb.Model(&models.HisOrderInfo{}).Where("order_number in (?)", numbers).Find(&infos).Error
  100. return
  101. }
  102. func SaveFaPiaoOrder(fapiao *models.HisFaPiaoOrder) (err error) {
  103. err = writeDb.Save(&fapiao).Error
  104. return
  105. }
  106. func UpdateFaPiaoNumber(number string, ids []string) (err error) {
  107. err = XTWriteDB().Model(&models.HisOrder{}).Where("id in (?)", ids).Updates(map[string]interface{}{"fa_piao_number": number}).Error
  108. return
  109. }
  110. func UpdateFaPiaoSN(number string, ids []string) (err error) {
  111. fmt.Println(ids)
  112. fmt.Println(number)
  113. err = XTWriteDB().Model(&models.HisOrder{}).Where("id in (?)", ids).Updates(map[string]interface{}{"fa_piao_sn": number}).Error
  114. return
  115. }
  116. func UpdateFaPiaoNumberByNumber(number string) (err error) {
  117. err = XTWriteDB().Model(&models.HisOrder{}).Where("fa_piao_number = ?", number).Updates(map[string]interface{}{"fa_piao_number": ""}).Error
  118. return
  119. }