medicine.go 5.2 KB

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