123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- package backend
- import (
- "context"
- "errors"
- "fmt"
- "kpt-pasture/model"
- "net/http"
- "strings"
- "time"
- pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
- "gitee.com/xuyiping_admin/pkg/logger/zaplog"
- "gitee.com/xuyiping_admin/pkg/xerr"
- "go.uber.org/zap"
- "gorm.io/gorm"
- )
- // CowDiseaseTreatmentDetail 发病牛只治疗详情列表
- func (s *StoreEntry) CowDiseaseTreatmentDetail(ctx context.Context, req *pasturePb.EventCowTreatmentDetailRequest,
- pagination *pasturePb.PaginationModel) (*pasturePb.EventCowTreatmentDetailResponse, error) {
- userModel, err := s.GetUserModel(ctx)
- if err != nil {
- return nil, xerr.WithStack(err)
- }
- eventCowDisease := &model.EventCowDisease{}
- var count int64 = 0
- pref := s.DB.Model(new(model.EventCowDisease)).
- Where("cow_id = ?", req.CowId).
- Where("pasture_id = ?", userModel.AppPasture.Id).
- Where("id = ?", req.Id)
- if req.DiseaseId > 0 {
- pref.Where("disease_id = ?", req.DiseaseId)
- }
- if req.DiseaseStartAt > 0 && req.DiseaseEndAt > 0 && req.DiseaseStartAt <= req.DiseaseEndAt {
- pref.Where("disease_at BETWEEN ? AND ?", req.DiseaseStartAt, req.DiseaseEndAt)
- }
- if err = pref.Count(&count).
- Limit(int(pagination.PageSize)).
- Offset(int(pagination.PageOffset)).
- Order("id desc").
- First(&eventCowDisease).Error; err != nil {
- if errors.Is(err, gorm.ErrRecordNotFound) {
- return &pasturePb.EventCowTreatmentDetailResponse{
- Code: http.StatusOK,
- Msg: "ok",
- Data: &pasturePb.EventCowTreatmentDetail{
- List: make([]*pasturePb.EventCowTreatment, 0),
- Total: 0,
- PageSize: pagination.PageSize,
- Page: pagination.Page,
- },
- }, nil
- } else {
- return nil, xerr.WithStack(err)
- }
- }
- eventCowTreatmentList := make([]*model.EventCowTreatment, 0)
- if err = s.DB.Model(new(model.EventCowTreatment)).
- Where("cow_disease_id = ?", req.Id).
- Where("cow_id = ?", req.CowId).
- Order("id desc").
- Find(&eventCowTreatmentList).Error; err != nil {
- return nil, xerr.WithStack(err)
- }
- return &pasturePb.EventCowTreatmentDetailResponse{
- Code: http.StatusOK,
- Msg: "ok",
- Data: &pasturePb.EventCowTreatmentDetail{
- List: model.EventCowTreatmentSlice(eventCowTreatmentList).ToPB(eventCowDisease),
- Total: int32(count),
- PageSize: pagination.Page,
- Page: pagination.PageSize,
- },
- }, nil
- }
- func (s *StoreEntry) DiseaseSuggestPrescription(ctx context.Context, diseaseId int64) (*pasturePb.ConfigOptionsListResponse, error) {
- userModel, err := s.GetUserModel(ctx)
- if err != nil {
- return nil, xerr.WithStack(err)
- }
- res := make([]*pasturePb.ConfigOptionsList, 0)
- prescriptionList := make([]*model.Prescription, 0)
- if err = s.DB.Model(new(model.Prescription)).
- Where("is_show = ?", pasturePb.IsShow_Ok).
- Where("pasture_id = ?", userModel.AppPasture.Id).
- Find(&prescriptionList).Error; err != nil {
- return nil, xerr.WithStack(err)
- }
- for _, v := range prescriptionList {
- disabled := false
- if strings.Contains(v.ApplicableDisease, fmt.Sprintf("%d", diseaseId)) {
- disabled = true
- }
- res = append(res, &pasturePb.ConfigOptionsList{
- Value: v.Id,
- Label: v.Name,
- Disabled: disabled,
- })
- }
- return &pasturePb.ConfigOptionsListResponse{
- Code: http.StatusOK,
- Msg: "ok",
- Data: res,
- }, nil
- }
- func (s *StoreEntry) CowDiseaseCurable(ctx context.Context, req *pasturePb.EventCowCurableRequest) error {
- userModel, err := s.GetUserModel(ctx)
- if err != nil {
- return xerr.WithStack(err)
- }
- eventCowDiseaseList := make([]*model.EventCowDisease, 0)
- if err = s.DB.Where("id IN ?", req.Ids).
- Where("health_status = ?", pasturePb.HealthStatus_Treatment).
- Where("pasture_id = ?", userModel.AppPasture.Id).
- Find(&eventCowDiseaseList).Error; err != nil {
- zaplog.Error("GetEventCowDiseaseList", zap.Any("err", err), zap.Any("req", req))
- return xerr.Custom("异常数据")
- }
- if len(eventCowDiseaseList) == 0 {
- return nil
- }
- operationUser, err := s.GetSystemUserById(ctx, int64(req.OperationId))
- if err != nil {
- return xerr.Customf("该用户不存在: %d", req.OperationId)
- }
- eventCowTreatmentList := make([]*model.EventCowTreatment, 0)
- for _, v := range eventCowDiseaseList {
- newEventCowTreatment := model.NewEventCowCurableTreatment(userModel.AppPasture.Id, userModel.SystemUser, operationUser, v, req.Remarks, int64(req.CurableAt))
- eventCowTreatmentList = append(eventCowTreatmentList, newEventCowTreatment)
- }
- if len(eventCowTreatmentList) <= 0 {
- return nil
- }
- if err = s.DB.Transaction(func(tx *gorm.DB) error {
- for _, eventCowDisease := range eventCowDiseaseList {
- eventCowDisease.EventCurableUpdate(int64(req.CurableAt))
- if err = tx.Model(eventCowDisease).
- Select("health_status", "diagnosed_result", "curable_at").
- Where("id = ?", eventCowDisease.Id).
- Where("health_status = ?", pasturePb.HealthStatus_Treatment).
- Updates(eventCowDisease).Error; err != nil {
- return xerr.WithStack(err)
- }
- cow, err := s.GetCowInfoByCowId(ctx, userModel.AppPasture.Id, eventCowDisease.CowId)
- if err != nil {
- return xerr.WithStack(err)
- }
- // 更新牛只健康状态
- cow.EventHealthStatusUpdate(pasturePb.HealthStatus_Curable)
- if err = tx.Model(cow).
- Select("health_status").
- Where("id = ?", eventCowDisease.CowId).
- Updates(cow).Error; err != nil {
- return xerr.WithStack(err)
- }
- // 更新发病事件日志
- cowLogs := &model.EventCowLog{CowId: cow.Id}
- curableAtFormat := ""
- if eventCowDisease.CurableAt > 0 {
- curableAtFormat = time.Unix(eventCowDisease.CurableAt, 0).Local().Format(model.LayoutDate2)
- }
- curableAtParse := time.Unix(eventCowDisease.CurableAt, 0).Local()
- diseaseAtParse := time.Unix(eventCowDisease.DiseaseAt, 0).Local()
- curableDays := int64(curableAtParse.Sub(diseaseAtParse).Hours() / 24)
- if err = tx.Table(cowLogs.TableName()).
- Where("event_type = ?", pasturePb.EventType_Disease).
- Where("event_at = ?", eventCowDisease.DiseaseAt).
- Update("event_description", fmt.Sprintf("疾病名称: %s; 状态: 已治愈; 治愈时间: %s; 治疗天数: %d;", eventCowDisease.DiseaseName, curableAtFormat, curableDays)).
- Error; err != nil {
- return xerr.WithStack(err)
- }
- }
- if err = tx.Model(new(model.EventCowTreatment)).Create(eventCowTreatmentList).Error; err != nil {
- return xerr.WithStack(err)
- }
- return nil
- }); err != nil {
- return xerr.WithStack(err)
- }
- return nil
- }
- // NeckRingUpdateHealth 更新牛只脖环揭发疾病信息
- func (s *StoreEntry) NeckRingUpdateHealth(ctx context.Context, pastureId, cowId int64, operationUser *model.SystemUser) error {
- neckRingHealthWarning := &model.NeckRingHealthWarning{}
- if err := s.DB.Model(new(model.NeckRingHealthWarning)).
- Where("pasture_id = ?", pastureId).
- Where("is_show = ?", pasturePb.IsShow_Ok).
- Where("cow_id = ?", cowId).
- First(neckRingHealthWarning).Error; err != nil {
- return xerr.WithStack(err)
- }
- neckRingHealth := &model.NeckRingHealth{}
- if err := s.DB.Model(new(model.NeckRingHealth)).
- Where("pasture_id = ?", pastureId).
- Where("is_show = ?", pasturePb.IsShow_Ok).
- Where("id = ?", neckRingHealthWarning.NeckRingHealthId).
- First(neckRingHealth).Error; err != nil {
- return xerr.WithStack(err)
- }
- if err := s.DB.Transaction(func(tx *gorm.DB) error {
- neckRingHealthWarning.EventDiseaseUpdate()
- if err := tx.Model(neckRingHealthWarning).
- Select("is_show", pasturePb.IsShow_Ok).
- Where("id = ?", neckRingHealthWarning.Id).
- Updates(neckRingHealthWarning).Error; err != nil {
- return xerr.WithStack(err)
- }
- neckRingHealth.EventDiseaseUpdate(operationUser)
- if err := tx.Model(neckRingHealth).
- Select("is_show", "check_user_id", "check_user_name", "check_result", "check_at").
- Where("id = ?", neckRingHealth.Id).
- Updates(neckRingHealth).Error; err != nil {
- return xerr.WithStack(err)
- }
- return nil
- }); err != nil {
- return xerr.WithStack(err)
- }
- return nil
- }
|