drug_stock_service.go 8.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. package service
  2. import (
  3. "XT_New/models"
  4. "github.com/jinzhu/gorm"
  5. )
  6. type DrugConfig struct {
  7. ID int64 `gorm:"column:id" json:"id" form:"id"`
  8. DrugName string `gorm:"column:drug_name" json:"drug_name" form:"drug_name"`
  9. DrugCategory int64 `gorm:"column:drug_category" json:"drug_category" form:"drug_category"`
  10. DrugSpec string `gorm:"column:drug_spec" json:"drug_spec" form:"drug_spec"`
  11. DrugType int64 `gorm:"column:drug_type" json:"drug_type" form:"drug_type"`
  12. DrugStatus string `gorm:"column:drug_status" json:"drug_status" form:"drug_status"`
  13. Status int64 `gorm:"column:status" json:"status" form:"status"`
  14. OrgId int64 `gorm:"column:org_id" json:"org_id" form:"org_id"`
  15. Manufacturer int64 `gorm:"column:manufacturer" json:"manufacturer" form:"manufacturer"`
  16. DrugSpecs []DrugConfig `gorm:"ForeignKey:DrugName;AssociationForeignKey:DrugName" json:"drug_specs"`
  17. RetailPrice float64 `gorm:"column:retail_price" json:"retail_price" form:"retail_price"`
  18. LastPrice float64 `gorm:"column:last_price" json:"last_price" form:"last_price"`
  19. MinUnit string `gorm:"column:min_unit" json:"min_unit" form:"min_unit"`
  20. HospApprFlag int64 `gorm:"column:hosp_appr_flag" json:"hosp_appr_flag" form:"hosp_appr_flag"`
  21. LmtUsedFlag int64 `gorm:"column:lmt_used_flag" json:"lmt_used_flag" form:"lmt_used_flag"`
  22. Total float64 `gorm:"column:total" json:"total" form:"total"`
  23. }
  24. func (DrugConfig) TableName() string {
  25. return "xt_base_drug"
  26. }
  27. func GetDrugs(orgId int64) (drugs []*DrugConfig, err error) {
  28. err = readDb.Model(&DrugConfig{}).Where("org_id = ? AND status = 1 AND find_in_set('停用',drug_status) = 0", orgId).Preload("DrugSpecs", "status = 1 AND find_in_set('停用',drug_status) = 0 AND org_id = ?", orgId).Group("drug_name").Find(&drugs).Error
  29. return
  30. }
  31. func FindAllDrugByManufactureId(manufacturer_id int64, dealer_id int64, org_id int64) (goodInfo []*DrugConfig, err error) {
  32. db := readDb.Model(&DrugConfig{}).Where("org_id = ? AND status = 1 AND find_in_set('停用',drug_status) = 0", org_id)
  33. if manufacturer_id > 0 {
  34. db = db.Where("manufacturer = ?", manufacturer_id)
  35. }
  36. if dealer_id > 0 {
  37. db = db.Where("dealer = ?", dealer_id)
  38. }
  39. err = db.Preload("DrugSpecs", "status = 1 AND org_id = ? AND find_in_set('停用',drug_status) = 0", org_id).Group("drug_name").Find(&goodInfo).Error
  40. return goodInfo, err
  41. }
  42. type MedicineInsuranceDate struct {
  43. RecordTime int64
  44. }
  45. func GetLastMedicineInsurance(orgID int64, type_id int64, module int64) (mip []*models.MedicineInsurancePercentage, err error) {
  46. var mip_other models.MedicineInsurancePercentage
  47. err = readDb.Model(&models.MedicineInsurancePercentage{}).Where("user_org_id = ? AND status=1 AND type_id = ? AND module = ?", orgID, type_id, module).Last(&mip_other).Error
  48. err = readDb.Model(&models.MedicineInsurancePercentage{}).Where("user_org_id = ? AND status=1 AND record_time = ? AND type_id = ? AND module = ?", orgID, mip_other.RecordTime, type_id, module).Find(&mip).Error
  49. return
  50. }
  51. type DrugWarehouseInfo struct {
  52. ID int64 `gorm:"column:id" json:"id" form:"id"`
  53. Number string `gorm:"column:number" json:"number" form:"number"`
  54. Status int64 `gorm:"column:status" json:"status" form:"status"`
  55. OrgId int64 `gorm:"column:org_id" json:"org_id" form:"org_id"`
  56. }
  57. func (DrugWarehouseInfo) TableName() string {
  58. return "xt_drug_warehouse_info"
  59. }
  60. func FindStockInNumber(orgId int64) (stockIns []*DrugWarehouseInfo, err error) {
  61. err = readDb.Model(&DrugWarehouseInfo{}).Where("org_id = ? AND status = 1", orgId).Group("number").Find(&stockIns).Error
  62. return
  63. }
  64. type DrugStockInfo struct {
  65. ID int64 `gorm:"column:id" json:"id" form:"id"`
  66. DrugName string `gorm:"column:drug_name" json:"drug_name" form:"drug_name"`
  67. DrugSpec string `gorm:"column:drug_spec" json:"drug_spec" form:"drug_spec"`
  68. RetailPrice float64 `gorm:"column:retail_price" json:"retail_price" form:"retail_price"`
  69. LastPrice float64 `gorm:"column:last_price" json:"last_price" form:"last_price"`
  70. DrugStatus string `gorm:"column:drug_status" json:"drug_status" form:"drug_status"`
  71. Status int64 `gorm:"column:status" json:"status" form:"status"`
  72. Ctime int64 `gorm:"column:ctime" json:"ctime" form:"ctime"`
  73. Mtime int64 `gorm:"column:mtime" json:"mtime" form:"mtime"`
  74. OrgId int64 `gorm:"column:org_id" json:"org_id" form:"org_id"`
  75. DrugCode string `gorm:"column:drug_code" json:"drug_code" form:"drug_code"`
  76. HospApprFlag int64 `gorm:"column:hosp_appr_flag" json:"hosp_appr_flag" form:"hosp_appr_flag"`
  77. LmtUsedFlag int64 `gorm:"column:lmt_used_flag" json:"lmt_used_flag" form:"lmt_used_flag"`
  78. QueryWarehousingInfo []models.DrugWarehouseInfo `gorm:"ForeignKey:DrugId;AssociationForeignKey:ID" json:"query_drug_warehousing_info"`
  79. QuerySalesReturnInfo []models.DrugSalesReturnInfo `gorm:"ForeignKey:DrugId;AssociationForeignKey:ID" json:"query_drug_sales_return_info"`
  80. QueryWarehouseOutInfo []models.DrugWarehouseOutInfo `gorm:"ForeignKey:DrugId;AssociationForeignKey:ID" json:"query_drug_warehouseout_info"`
  81. QueryCancelStockInfo []models.DrugCancelStockInfo `gorm:"ForeignKey:DrugId;AssociationForeignKey:ID" json:"query_drug_cancel_stock_info"`
  82. Total float64 `gorm:"column:total" json:"total" form:"total"`
  83. }
  84. func (DrugStockInfo) TableName() string {
  85. return "xt_base_drug"
  86. }
  87. func FindAllDrugStockInfo(orgId int64, page int64, limit int64, keyword string, drugCategory int64, startTime int64, endTime int64) (list []*DrugStockInfo, total int64, err error) {
  88. db := readDb.Model(&DrugStockInfo{})
  89. if drugCategory > 0 {
  90. db = db.Where("xt_base_drug.org_id = ? AND xt_base_drug.status = 1 AND xt_base_drug.drug_category = ?", orgId, drugCategory)
  91. } else {
  92. db = db.Where("xt_base_drug.org_id = ? AND xt_base_drug.status = 1", orgId)
  93. }
  94. if startTime > 0 {
  95. db = db.Preload("QueryWarehousingInfo", func(db *gorm.DB) *gorm.DB {
  96. return db.Where("org_id = ? AND status = 1 and ctime >=?", orgId, startTime)
  97. })
  98. db = db.Preload("QuerySalesReturnInfo", "org_id = ? AND status = 1 and ctime>=?", orgId, startTime)
  99. db = db.Preload("QueryWarehouseOutInfo", func(db *gorm.DB) *gorm.DB {
  100. return db.Where("org_id = ? AND status = 1 and sys_record_time>=?", orgId, startTime)
  101. })
  102. db = db.Preload("QueryCancelStockInfo", "org_id = ? AND status = 1 and ctime>=?", orgId, startTime)
  103. } else {
  104. db = db.Preload("QueryWarehousingInfo", func(db *gorm.DB) *gorm.DB {
  105. return db.Where("org_id = ? AND status = 1", orgId)
  106. })
  107. db = db.Preload("QuerySalesReturnInfo", "org_id = ? AND status = 1", orgId)
  108. db = db.Preload("QueryWarehouseOutInfo", func(db *gorm.DB) *gorm.DB {
  109. return db.Where("org_id = ? AND status = 1", orgId)
  110. })
  111. db = db.Preload("QueryCancelStockInfo", "org_id = ? AND status = 1", orgId)
  112. }
  113. if endTime > 0 {
  114. db = db.Preload("QueryWarehousingInfo", func(db *gorm.DB) *gorm.DB {
  115. return db.Where("org_id = ? AND status = 1 and ctime <=?", orgId, startTime, endTime)
  116. })
  117. db = db.Preload("QuerySalesReturnInfo", "org_id = ? AND status = 1 and ctime>=? and ctime<=?", orgId, startTime, endTime)
  118. db = db.Preload("QueryWarehouseOutInfo", func(db *gorm.DB) *gorm.DB {
  119. return db.Where("org_id = ? AND status = 1 and sys_record_time>=? and sys_record_time<=?", orgId, startTime, endTime)
  120. })
  121. db = db.Preload("QueryCancelStockInfo", "org_id = ? AND status = 1 and ctime >=? and ctime<=?", orgId, startTime, endTime)
  122. } else {
  123. db = db.Preload("QueryWarehousingInfo", func(db *gorm.DB) *gorm.DB {
  124. return db.Where("org_id = ? AND status = 1", orgId)
  125. })
  126. db = db.Preload("QuerySalesReturnInfo", "org_id = ? AND status = 1", orgId)
  127. db = db.Preload("QueryWarehouseOutInfo", func(db *gorm.DB) *gorm.DB {
  128. return db.Where("org_id = ? AND status = 1", orgId)
  129. })
  130. db = db.Preload("QueryCancelStockInfo", "org_id = ? AND status = 1", orgId)
  131. }
  132. if len(keyword) > 0 {
  133. likeKey := "%" + keyword + "%"
  134. db = db.Where("xt_base_drug.drug_name LIKE ? OR xt_base_drug.drug_spec LIKE ?", likeKey, likeKey)
  135. }
  136. db = db.Count(&total)
  137. offset := (page - 1) * limit
  138. err = db.Offset(offset).Limit(limit).Order("ctime desc").Find(&list).Error
  139. return
  140. }