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_, "查询成功") }