medicine.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package controllers
  2. import (
  3. "Medical_ERP/common/global"
  4. "Medical_ERP/common/redis"
  5. _ "Medical_ERP/common/response"
  6. "Medical_ERP/dto"
  7. "Medical_ERP/services"
  8. "Medical_ERP/utils"
  9. "encoding/json"
  10. "errors"
  11. "fmt"
  12. beego "github.com/beego/beego/v2/server/web"
  13. "github.com/go-resty/resty/v2"
  14. "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/beegouser"
  15. "strings"
  16. "time"
  17. )
  18. type MedicineController struct {
  19. BaseController
  20. }
  21. // BatchNumber 批号列表
  22. // @Summary 批号列表
  23. // @Description 批号列表
  24. // @Tags 药品
  25. // @Param data body dto.MedicineBatchNumberReq true "body"
  26. // @Success 200 {object} response.Page "{"code": 200, "data": [...]}"
  27. // @Router /medicine/batch-number [post]
  28. // @Security Bearer
  29. func (c MedicineController) BatchNumber() {
  30. s := services.Medicine{}
  31. reqData := dto.MedicineBatchNumberReq{}
  32. if err := c.ParseAndValidate(&c.Ctx.Input.RequestBody, &reqData); err != nil {
  33. c.Error(global.ParseFormErr, err, err.Error())
  34. return
  35. }
  36. list := make([]string, 0)
  37. err := s.GetBatchNumber(&reqData, &list, beegouser.GetDeptId(c.Ctx))
  38. if err != nil {
  39. c.Error(global.BadRequest, err, err.Error())
  40. return
  41. }
  42. c.OK(list, "查询成功")
  43. }
  44. // BasicDataStat 基本数据统计
  45. // @Summary 基本数据统计
  46. // @Description 基本数据统计
  47. // @Tags 药品
  48. // @Success 200 {object} response.Page "{"code": 200, "data": [...]}"
  49. // @Router /medicine/basic-data-stat [post]
  50. // @Security Bearer
  51. func (c MedicineController) BasicDataStat() {
  52. s := services.Medicine{}
  53. list, err := s.BasicDataStat(beegouser.GetDeptId(c.Ctx))
  54. if err != nil {
  55. c.Error(global.BadRequest, err, err.Error())
  56. return
  57. }
  58. c.OK(list, "查询成功")
  59. }
  60. // 码上放心药品查询
  61. func (c MedicineController) MSFXQuery() {
  62. code := c.GetString("code")
  63. if len(code) == 0 {
  64. err := errors.New("码上放心追溯码不能为空")
  65. c.Error(400, err, err.Error())
  66. return
  67. }
  68. MSFX_baseUrl, _ := beego.AppConfig.String("MSFX_baseUrl")
  69. MSFX_user, _ := beego.AppConfig.String("MSFX_user")
  70. MSFX_mock := beego.AppConfig.DefaultBool("MSFX_mock", true)
  71. info := make([]map[string]interface{}, 0)
  72. if MSFX_mock {
  73. mock := map[string]interface{}{
  74. "名称": "替硝唑片" + strings.ToUpper(utils.GenerateAppKey(2)),
  75. "批号": strings.ToUpper(utils.GenerateAppKey(4)),
  76. "有效期至": "20250619",
  77. "包装数量": "1",
  78. "生产日期": "2023-06-20",
  79. "批准文号": "国药准字H20033090",
  80. "效期": "24月",
  81. "药品类别": "普通药品",
  82. "规格": "8片/盒",
  83. "规格摘要": "0.5g",
  84. "类型": "片剂",
  85. "厂家": "山东鲁抗医药集团赛特有限责任公司",
  86. }
  87. mock_ := make(map[string]interface{})
  88. mock_["product_name"] = mock["名称"]
  89. mock_["enterprise_name"] = mock["厂家"]
  90. mock_["spec_name"] = fmt.Sprintf("%s×%s", mock["规格摘要"], mock["规格"])
  91. mock_["dosage_form_name"] = mock["类型"]
  92. mock_["batch_number"] = mock["批号"]
  93. date := mock["有效期至"].(string)
  94. mock_["expiry_date"] = fmt.Sprintf("%s-%s-%s", date[0:4], date[4:6], date[6:8])
  95. mock_["produced_date"] = mock["生产日期"]
  96. mock_["approval_number"] = mock["批准文号"]
  97. info = append(info, mock_)
  98. c.OK(info, "查询成功")
  99. return
  100. }
  101. err := redis.GetJson(global.RedisMSFXMedicineInfo+code, &info)
  102. if err == nil {
  103. c.OK(info, "查询成功")
  104. return
  105. }
  106. client := resty.New()
  107. resp, err := client.R().
  108. SetQueryParams(map[string]string{
  109. "user": MSFX_user,
  110. "code": code,
  111. }).
  112. Get(MSFX_baseUrl)
  113. if err != nil {
  114. c.Error(400, err, err.Error())
  115. return
  116. }
  117. if err = json.Unmarshal(resp.Body(), &info); err != nil {
  118. c.Error(400, err, err.Error())
  119. return
  120. }
  121. info_ := make([]map[string]interface{}, len(info))
  122. for i := 0; i < len(info); i++ {
  123. info_[i] = make(map[string]interface{})
  124. if len(info[i]["名称"].(string)) == 0 {
  125. c.Error(400, err, "药品信息不存在")
  126. }
  127. info_[i]["product_name"] = info[i]["名称"]
  128. info_[i]["enterprise_name"] = info[i]["厂家"]
  129. info_[i]["spec_name"] = fmt.Sprintf("%s×%s", info[i]["规格摘要"], info[i]["规格"])
  130. info_[i]["dosage_form_name"] = info[i]["类型"]
  131. info_[i]["batch_number"] = info[i]["批号"]
  132. date := info[i]["有效期至"].(string)
  133. info_[i]["expiry_date"] = fmt.Sprintf("%s-%s-%s", date[0:4], date[4:6], date[6:8])
  134. info_[i]["produced_date"] = info[i]["生产日期"]
  135. info_[i]["approval_number"] = info[i]["批准文号"]
  136. }
  137. redis.SetJson(global.RedisMSFXMedicineInfo+code, info_, 7*24*time.Hour)
  138. c.OK(info_, "查询成功")
  139. }