Browse Source

medical: 医疗器械

Yi 7 months ago
parent
commit
cfe7ffac0b
7 changed files with 170 additions and 4 deletions
  1. 1 1
      go.mod
  2. 4 0
      go.sum
  3. 54 1
      http/handler/goods/drugs.go
  4. 2 0
      http/route/goods_api.go
  5. 63 0
      model/medical_equipment.go
  6. 43 1
      module/backend/goods.go
  7. 3 1
      module/backend/interface.go

+ 1 - 1
go.mod

@@ -3,7 +3,7 @@ module kpt-pasture
 go 1.17
 
 require (
-	gitee.com/xuyiping_admin/go_proto v0.0.0-20240814032337-1d198707737c
+	gitee.com/xuyiping_admin/go_proto v0.0.0-20240820033652-5d08bd96ae57
 	gitee.com/xuyiping_admin/pkg v0.0.0-20231218082641-aac597b8a015
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible
 	github.com/getsentry/sentry-go v0.23.0

+ 4 - 0
go.sum

@@ -94,6 +94,10 @@ gitee.com/xuyiping_admin/go_proto v0.0.0-20240813081418-0fe70f4328c6 h1:Qaz7HlPv
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240813081418-0fe70f4328c6/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240814032337-1d198707737c h1:h8TDm6PMxEQoBaYc7wyfqsDW4T34/jb8CO7jY6G1gac=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240814032337-1d198707737c/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240820032343-3d8bf42d67d5 h1:+7bWlvQX5X9ZgyOglFYt7ATY/mJPXMr5F+Z5U/LQROk=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240820032343-3d8bf42d67d5/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240820033652-5d08bd96ae57 h1:UY7UYkWnR7BMBtb/lY7NGtXLB1M2x/8khip0dqHk10o=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240820033652-5d08bd96ae57/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/pkg v0.0.0-20231218082641-aac597b8a015 h1:dfb5dRd57L2HKjdwLT93UFmPYFPOmEl56gtZmqcNnaE=
 gitee.com/xuyiping_admin/pkg v0.0.0-20231218082641-aac597b8a015/go.mod h1:Fk4GYI/v0IK3XFrm1Gn+VkgCz5Y7mfswD5hsTJYOG6A=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=

+ 54 - 1
http/handler/goods/drugs.go

@@ -50,12 +50,65 @@ func DrugsCreateOrUpdate(c *gin.Context) {
 		valid.Field(&req.Specs, valid.Required),
 		valid.Field(&req.Inventory, valid.Required),
 		valid.Field(&req.ExpirationAt, valid.Required),
+		valid.Field(&req.BatchNumber, valid.Required),
 	); err != nil {
 		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
 		return
 	}
 
-	if err := middleware.BackendOperation(c).OpsService.DrugsCreate(c, &req); err != nil {
+	if err := middleware.BackendOperation(c).OpsService.DrugsCreateOrUpdate(c, &req); err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+
+	ginutil.JSONResp(c, &operationPb.CommonOK{
+		Code: http.StatusOK,
+		Msg:  "ok",
+		Data: &operationPb.Success{Success: true},
+	})
+}
+
+func MedicalEquipmentList(c *gin.Context) {
+	var req pasturePb.SearchMedicalEquipmentRequest
+	if err := ginutil.BindProto(c, &req); err != nil {
+		apierr.AbortBadRequest(c, http.StatusOK, err)
+		return
+	}
+
+	pagination := &pasturePb.PaginationModel{
+		Page:       int32(c.GetInt(middleware.Page)),
+		PageSize:   int32(c.GetInt(middleware.PageSize)),
+		PageOffset: int32(c.GetInt(middleware.PageOffset)),
+	}
+
+	res, err := middleware.Dependency(c).StoreEventHub.OpsService.MedicalEquipmentList(c, &req, pagination)
+	if err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	ginutil.JSONResp(c, res)
+}
+
+func MedicalEquipmentCreateOrUpdate(c *gin.Context) {
+	var req pasturePb.SearchMedicalEquipmentList
+	if err := ginutil.BindProto(c, &req); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	if err := valid.ValidateStruct(&req,
+		valid.Field(&req.Name, valid.Required),
+		valid.Field(&req.Producer, valid.Required),
+		valid.Field(&req.Unit, valid.Required),
+		valid.Field(&req.Specs, valid.Required),
+		valid.Field(&req.Inventory, valid.Required),
+		valid.Field(&req.BatchNumber, valid.Required),
+	); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	if err := middleware.BackendOperation(c).OpsService.MedicalEquipmentCreateOrUpdate(c, &req); err != nil {
 		apierr.ClassifiedAbort(c, err)
 		return
 	}

+ 2 - 0
http/route/goods_api.go

@@ -15,5 +15,7 @@ func GoodsManageAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		goodsRoute := authRouteGroup(s, "/api/v1/goods/")
 		goodsRoute.POST("/drugs/list", goods.DrugsList)
 		goodsRoute.POST("/drugs/createOrUpdate", goods.DrugsCreateOrUpdate)
+		goodsRoute.POST("/medical/equipment/list", goods.MedicalEquipmentList)
+		goodsRoute.POST("/medical/equipment/createOrUpdate", goods.MedicalEquipmentCreateOrUpdate)
 	}
 }

+ 63 - 0
model/medical_equipment.go

@@ -0,0 +1,63 @@
+package model
+
+import pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
+
+type MedicalEquipment struct {
+	Id            int64               `json:"id"`
+	Name          string              `json:"name"`
+	Producer      string              `json:"producer"`
+	BatchNumber   string              `json:"batch_number"`
+	Unit          pasturePb.Unit_Kind `json:"unit"`
+	Specs         string              `json:"specs"`
+	Inventory     int32               `json:"inventory"`
+	Price         int32               `json:"price"`
+	Remarks       string              `json:"remarks"`
+	OperationId   int32               `json:"operation_id"`
+	OperationName string              `json:"operation_name"`
+	CreatedAt     int64               `json:"created_at"`
+	UpdatedAt     int64               `json:"updated_at"`
+}
+
+func (m *MedicalEquipment) TableName() string {
+	return "medical_equipment"
+}
+
+func NewMedicalEquipment(req *pasturePb.SearchMedicalEquipmentList, currentUser *SystemUser) *MedicalEquipment {
+	return &MedicalEquipment{
+		Name:          req.Name,
+		Producer:      req.Producer,
+		BatchNumber:   req.BatchNumber,
+		Unit:          req.Unit,
+		Specs:         req.Specs,
+		Inventory:     req.Inventory,
+		Price:         int32(req.Price * 100),
+		Remarks:       req.Remarks,
+		OperationId:   int32(currentUser.Id),
+		OperationName: currentUser.Name,
+	}
+}
+
+type MedicalEquipmentSlice []*MedicalEquipment
+
+func (m MedicalEquipmentSlice) ToPB(unitMap map[pasturePb.Unit_Kind]string) []*pasturePb.SearchMedicalEquipmentList {
+	res := make([]*pasturePb.SearchMedicalEquipmentList, len(m))
+	for i, v := range m {
+		res[i] = &pasturePb.SearchMedicalEquipmentList{
+			Id:            int32(v.Id),
+			Name:          v.Name,
+			Producer:      v.Producer,
+			BatchNumber:   v.BatchNumber,
+			Unit:          v.Unit,
+			UnitName:      unitMap[v.Unit],
+			Specs:         v.Specs,
+			Inventory:     v.Inventory,
+			Price:         float32(v.Price) / 100,
+			Remarks:       v.Remarks,
+			OperationId:   v.OperationId,
+			OperationName: v.OperationName,
+			CreatedAt:     int32(v.CreatedAt),
+			UpdatedAt:     int32(v.UpdatedAt),
+		}
+	}
+	return res
+}

+ 43 - 1
module/backend/goods.go

@@ -49,7 +49,7 @@ func (s *StoreEntry) DrugsList(ctx context.Context, req *pasturePb.SearchDrugsRe
 	}, nil
 }
 
-func (s *StoreEntry) DrugsCreate(ctx context.Context, req *pasturePb.SearchDrugsList) error {
+func (s *StoreEntry) DrugsCreateOrUpdate(ctx context.Context, req *pasturePb.SearchDrugsList) error {
 	currentUser, _ := s.GetCurrentSystemUser(ctx)
 	newDrugs := model.NewDrugs(req, currentUser)
 	if req.Id <= 0 {
@@ -64,3 +64,45 @@ func (s *StoreEntry) DrugsCreate(ctx context.Context, req *pasturePb.SearchDrugs
 
 	return nil
 }
+
+func (s *StoreEntry) MedicalEquipmentList(ctx context.Context, req *pasturePb.SearchMedicalEquipmentRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchMedicalEquipmentResponse, error) {
+	medicalEquipmentList := make([]*model.MedicalEquipment, 0)
+	var count int64 = 0
+
+	pref := s.DB.Model(new(model.MedicalEquipment))
+	if req.Name != "" {
+		pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
+	}
+
+	if err := pref.Order("id desc").Count(&count).Limit(int(pagination.PageSize)).Offset(int(pagination.PageOffset)).
+		Find(&medicalEquipmentList).Error; err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	unitMap := s.UnitMap()
+	return &pasturePb.SearchMedicalEquipmentResponse{
+		Code:    http.StatusOK,
+		Message: "ok",
+		Data: &pasturePb.SearchMedicalEquipmentData{
+			List:     model.MedicalEquipmentSlice(medicalEquipmentList).ToPB(unitMap),
+			Total:    int32(count),
+			PageSize: pagination.PageSize,
+			Page:     pagination.Page,
+		},
+	}, nil
+}
+
+func (s *StoreEntry) MedicalEquipmentCreateOrUpdate(ctx context.Context, req *pasturePb.SearchMedicalEquipmentList) error {
+	currentUser, _ := s.GetCurrentSystemUser(ctx)
+	newDrugs := model.NewMedicalEquipment(req, currentUser)
+	if req.Id <= 0 {
+		if err := s.DB.Create(newDrugs).Error; err != nil {
+			return xerr.WithStack(err)
+		}
+	} else {
+		if err := s.DB.Where("id = ?", req.Id).Updates(newDrugs).Error; err != nil {
+			return xerr.WithStack(err)
+		}
+	}
+	return nil
+}

+ 3 - 1
module/backend/interface.go

@@ -172,7 +172,9 @@ type CowService interface {
 //go:generate mockgen -destination mock/GoodsService.go -package kptservicemock kpt-pasture/module/backend GoodsService
 type GoodsService interface {
 	DrugsList(ctx context.Context, req *pasturePb.SearchDrugsRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchDrugsResponse, error)
-	DrugsCreate(ctx context.Context, req *pasturePb.SearchDrugsList) error
+	DrugsCreateOrUpdate(ctx context.Context, req *pasturePb.SearchDrugsList) error
+	MedicalEquipmentList(ctx context.Context, req *pasturePb.SearchMedicalEquipmentRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchMedicalEquipmentResponse, error)
+	MedicalEquipmentCreateOrUpdate(ctx context.Context, req *pasturePb.SearchMedicalEquipmentList) error
 }
 
 //go:generate mockgen -destination mock/AnalyseService.go -package kptservicemock kpt-pasture/module/backend AnalyseService