123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- package controllers
- import (
- "Medical_ERP/common/global"
- "Medical_ERP/common/redis"
- _ "Medical_ERP/common/response"
- "Medical_ERP/conf"
- "Medical_ERP/dto"
- "Medical_ERP/services"
- "Medical_ERP/utils"
- "encoding/json"
- "errors"
- "fmt"
- beego "github.com/beego/beego/v2/server/web"
- "github.com/go-resty/resty/v2"
- "gogs.baozhida.cn/zoie/OAuth-core/pkg/jwtauth/beegouser"
- "strings"
- "time"
- )
- type MedicineController struct {
- BaseController
- }
- // BatchNumber 批号列表
- // @Summary 批号列表
- // @Description 批号列表
- // @Tags 药品
- // @Param data body dto.MedicineBatchNumberReq true "body"
- // @Success 200 {object} response.Page "{"code": 200, "data": [...]}"
- // @Router /medicine/batch-number [post]
- // @Security Bearer
- func (c MedicineController) BatchNumber() {
- s := services.Medicine{}
- reqData := dto.MedicineBatchNumberReq{}
- if err := c.ParseAndValidate(&c.Ctx.Input.RequestBody, &reqData); err != nil {
- c.Error(global.ParseFormErr, err, err.Error())
- return
- }
- list := make([]string, 0)
- err := s.GetBatchNumber(&reqData, &list, beegouser.GetDeptId(c.Ctx))
- if err != nil {
- c.Error(global.BadRequest, err, err.Error())
- return
- }
- c.OK(list, "查询成功")
- }
- // BasicDataStat 基本数据统计
- // @Summary 基本数据统计
- // @Description 基本数据统计
- // @Tags 药品
- // @Success 200 {object} response.Page "{"code": 200, "data": [...]}"
- // @Router /medicine/basic-data-stat [post]
- // @Security Bearer
- func (c MedicineController) BasicDataStat() {
- s := services.Medicine{}
- list, err := s.BasicDataStat(beegouser.GetDeptId(c.Ctx))
- if err != nil {
- c.Error(global.BadRequest, err, err.Error())
- return
- }
- c.OK(list, "查询成功")
- }
- // 码上放心药品查询
- func (c MedicineController) MSFXQuery() {
- code := c.GetString("code")
- if len(code) == 0 {
- err := errors.New("码上放心追溯码不能为空")
- c.Error(400, err, err.Error())
- return
- }
- if strings.HasPrefix(code, "9") {
- // 宝智达溯码平台
- type Res struct {
- Code int
- Msg string
- Data struct {
- CodeNum string
- CreateTime string
- Data map[string]interface{}
- }
- }
- var res Res
- client := resty.New()
- resp, err := client.R().Get(conf.BZD_pcodeUrl + code)
- if err != nil {
- c.Error(400, err, err.Error())
- return
- }
- if err = json.Unmarshal(resp.Body(), &res); err != nil {
- c.Error(400, err, err.Error())
- return
- }
- if res.Code != 200 {
- err = errors.New(res.Msg)
- c.Error(400, err, err.Error())
- return
- }
- info_ := make([]map[string]interface{}, 0)
- info_ = append(info_, res.Data.Data)
- c.OK(info_, "查询成功")
- return
- }
- MSFX_baseUrl, _ := beego.AppConfig.String("MSFX_baseUrl")
- MSFX_user, _ := beego.AppConfig.String("MSFX_user")
- MSFX_mock := beego.AppConfig.DefaultBool("MSFX_mock", true)
- info := make([]map[string]interface{}, 0)
- if MSFX_mock {
- mock := map[string]interface{}{
- "名称": "替硝唑片" + strings.ToUpper(utils.GenerateAppKey(2)),
- "批号": strings.ToUpper(utils.GenerateAppKey(4)),
- "有效期至": "20250619",
- "包装数量": "1",
- "生产日期": "2023-06-20",
- "批准文号": "国药准字H20033090",
- "效期": "24月",
- "药品类别": "普通药品",
- "规格": "8片/盒",
- "规格摘要": "0.5g",
- "类型": "片剂",
- "厂家": "山东鲁抗医药集团赛特有限责任公司",
- }
- mock_ := make(map[string]interface{})
- mock_["product_name"] = mock["名称"]
- mock_["enterprise_name"] = mock["厂家"]
- mock_["quantity"] = mock["包装数量"]
- mock_["spec_name"] = fmt.Sprintf("%s×%s", mock["规格摘要"], mock["规格"])
- mock_["dosage_form_name"] = mock["类型"]
- mock_["batch_number"] = mock["批号"]
- date := mock["有效期至"].(string)
- mock_["expiry_date"] = fmt.Sprintf("%s-%s-%s", date[0:4], date[4:6], date[6:8])
- mock_["produced_date"] = mock["生产日期"]
- mock_["approval_number"] = mock["批准文号"]
- info = append(info, mock_)
- c.OK(info, "查询成功")
- return
- }
- err := redis.GetJson(global.RedisMSFXMedicineInfo+code, &info)
- if err == nil {
- c.OK(info, "查询成功")
- return
- }
- client := resty.New()
- resp, err := client.R().
- SetQueryParams(map[string]string{
- "user": MSFX_user,
- "code": code,
- }).
- Get(MSFX_baseUrl)
- if err != nil {
- c.Error(400, err, err.Error())
- return
- }
- if err = json.Unmarshal(resp.Body(), &info); err != nil {
- c.Error(400, err, err.Error())
- return
- }
- info_ := make([]map[string]interface{}, len(info))
- for i := 0; i < len(info); i++ {
- info_[i] = make(map[string]interface{})
- if len(info[i]["名称"].(string)) == 0 {
- c.Error(400, err, "药品信息不存在")
- }
- info_[i]["product_name"] = info[i]["名称"]
- info_[i]["enterprise_name"] = info[i]["厂家"]
- info_[i]["quantity"] = info[i]["包装数量"]
- info_[i]["spec_name"] = fmt.Sprintf("%s×%s", info[i]["规格摘要"], info[i]["规格"])
- info_[i]["dosage_form_name"] = info[i]["类型"]
- info_[i]["batch_number"] = info[i]["批号"]
- date := info[i]["有效期至"].(string)
- info_[i]["expiry_date"] = fmt.Sprintf("%s-%s-%s", date[0:4], date[4:6], date[6:8])
- info_[i]["produced_date"] = info[i]["生产日期"]
- info_[i]["approval_number"] = info[i]["批准文号"]
- }
- redis.SetJson(global.RedisMSFXMedicineInfo+code, info_, 7*24*time.Hour)
- c.OK(info_, "查询成功")
- }
|