Browse Source

system: user update

Yi 1 week ago
parent
commit
6f641296ac

+ 1 - 1
go.mod

@@ -3,7 +3,7 @@ module kpt-pasture
 go 1.17
 
 require (
-	gitee.com/xuyiping_admin/go_proto v0.0.0-20250521031814-2eb66df61c58
+	gitee.com/xuyiping_admin/go_proto v0.0.0-20250523062919-b893047f10c8
 	gitee.com/xuyiping_admin/pkg v0.0.0-20250514071642-f92d2ac9a85d
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible
 	github.com/eclipse/paho.mqtt.golang v1.4.3

+ 4 - 0
go.sum

@@ -107,6 +107,10 @@ gitee.com/xuyiping_admin/go_proto v0.0.0-20250521021325-89e4fc71dd39 h1:/7Mllucr
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250521021325-89e4fc71dd39/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250521031814-2eb66df61c58 h1:PDG62cMpWaD/V11wty6sjiM4t2/sYFBg9u2S1tiZWbs=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250521031814-2eb66df61c58/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250523054938-90895b21e2e6 h1:g/L5Dr4bkiWijpYC15mUrwBh+VSE400njGEvzgkmwpk=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250523054938-90895b21e2e6/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250523062919-b893047f10c8 h1:j8gu75Sg2xvbC+dZ0UGFQMcNnU8AmBQ41KRgHXOcPik=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250523062919-b893047f10c8/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/pkg v0.0.0-20241108060137-caea58c59f5b h1:w05MxH7yqveRlaRbxHhbif5YjPrJFodRPfOjYhXn7Zk=
 gitee.com/xuyiping_admin/pkg v0.0.0-20241108060137-caea58c59f5b/go.mod h1:8tF25X6pE9WkFCczlNAC0K2mrjwKvhhp02I7o0HtDxY=
 gitee.com/xuyiping_admin/pkg v0.0.0-20250514071642-f92d2ac9a85d h1:vBXmMRggF7mZVPGRDgavZ87igJgkezwX0a3v1/XtIMQ=

+ 2 - 1
http/handler/system/user.go

@@ -50,6 +50,7 @@ func UserCreateOrUpdate(c *gin.Context) {
 		valid.Field(&req.Name, valid.Required),
 		valid.Field(&req.DeptId, valid.Required),
 		valid.Field(&req.Mobile, valid.Required),
+		valid.Field(&req.Password, valid.Required),
 	); err != nil {
 		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
 		return
@@ -193,7 +194,7 @@ func UserRoleSave(c *gin.Context) {
 
 	if err := valid.ValidateStruct(&req,
 		valid.Field(&req.UserId, valid.Required),
-		valid.Field(&req.RoleId, valid.Required),
+		valid.Field(&req.RoleIds, valid.Required),
 	); err != nil {
 		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
 		return

+ 1 - 1
http/route/system_api.go

@@ -37,7 +37,7 @@ func SystemAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		systemRoute.POST("/role/createOrUpdate", system.RoleCreateOrUpdate)
 		systemRoute.GET("/role/menu/:id", system.GetRoleMenu)
 		systemRoute.POST("/role/menu/save", system.RoleMenuSave)
-		systemRoute.GET("/role/list", system.GetRoleList)
+		//systemRoute.GET("/role/list", system.GetRoleList)
 
 		// 系统菜单权限
 		systemRoute.POST("/menu/list", system.SearchSystemMenuList)

+ 1 - 0
model/cow.go

@@ -555,6 +555,7 @@ func (c CowSlice) ToPB(
 			EleEarNumber:                v.EleEarNumber,
 			AdmissionPrice:              v.AdmissionPrice,
 			PurposeName:                 purposeName,
+			BatchNumber:                 v.BatchNumber,
 		}
 	}
 	return res

+ 1 - 0
model/system_user.go

@@ -10,6 +10,7 @@ import (
 
 type SystemUser struct {
 	Id              int64                  `json:"id"`
+	PastureId       int64                  `json:"pastureId"`
 	Name            string                 `json:"name"`
 	NickName        string                 `json:"nickName"`
 	Mobile          string                 `json:"mobile"`

+ 1 - 1
module/backend/config_data_extend.go

@@ -390,7 +390,7 @@ func (s *StoreEntry) GenerateBatchNumber(ctx context.Context) (*model.GenerateBa
 		return nil, xerr.WithStack(err)
 	}
 
-	data := fmt.Sprintf("%s%d%s", time.Now().Local().Format(model.LayoutDate2), userModel.AppPasture.Id, util.GenerateRandomNumberString(8))
+	data := fmt.Sprintf("%s%d%s", time.Now().Local().Format(model.LayoutDate), userModel.AppPasture.Id, util.GenerateRandomNumber(10))
 	return &model.GenerateBatchNumberResponse{
 		Code: http.StatusOK,
 		Msg:  "ok",

+ 10 - 3
module/backend/sql.go

@@ -58,13 +58,20 @@ func (s *StoreEntry) GetCurrentSystemUser(ctx context.Context) (*model.SystemUse
 	systemUser := &model.SystemUser{Name: userName}
 	if err = s.DB.Model(new(model.SystemUser)).
 		Where("name = ?", userName).
-		Where("is_show = ? and is_delete = ?", pasturePb.IsShow_Ok, pasturePb.IsShow_Ok).
 		First(systemUser).Error; err != nil {
+		zaplog.Error("GetCurrentSystemUser", zap.Any("err", err), zap.Any("userName", userName))
+
 		if errors.Is(err, gorm.ErrRecordNotFound) {
 			return nil, xerr.Custom("当前登录用户数据不存在")
+		} else {
+			return nil, xerr.Custom("用户登录信息有误,请退出重新登录")
 		}
-		zaplog.Error("GetCurrentSystemUser", zap.Any("err", err), zap.Any("userName", userName))
-		return nil, xerr.Custom("用户登录信息有误,请退出重新登录")
+	}
+	if systemUser.IsDelete != pasturePb.IsShow_Ok {
+		return nil, xerr.Custom("当前用户数据已经删除")
+	}
+	if systemUser.IsShow != pasturePb.IsShow_Ok {
+		return nil, xerr.Custom("当前用户已禁用")
 	}
 	return systemUser, nil
 }

+ 19 - 5
module/backend/system_service.go

@@ -256,7 +256,11 @@ func (s *StoreEntry) SystemUserRole(ctx context.Context, userId int64) (*pasture
 	return &pasturePb.SystemUserRoleResponse{
 		Code: http.StatusOK,
 		Msg:  "ok",
-		Data: int32(systemUser.RoleId),
+		Data: &pasturePb.UserRoleData{
+			RoleIds: []int32{
+				int32(systemUser.RoleId),
+			},
+		},
 	}, nil
 }
 
@@ -269,14 +273,16 @@ func (s *StoreEntry) SystemUserRoleSave(ctx context.Context, req *pasturePb.Syst
 		return xerr.WithStack(err)
 	}
 
-	systemRole := &model.SystemRole{Id: int64(req.RoleId)}
+	// todo 用户觉得绑定单个还是多少q
+	systemRole := &model.SystemRole{Id: int64(req.RoleIds[0])}
 	if err := s.DB.First(systemRole).Error; err != nil {
 		if errors.Is(err, gorm.ErrRecordNotFound) {
 			return xerr.Custom("该角色不存在")
 		}
 		return xerr.WithStack(err)
 	}
-	if err := s.DB.Model(systemUser).Update("role_id", systemRole.Id).Error; err != nil {
+	if err := s.DB.Model(systemUser).
+		Update("role_id", systemRole.Id).Error; err != nil {
 		return xerr.WithStack(err)
 	}
 	return nil
@@ -606,7 +612,10 @@ func (s *StoreEntry) SearchSystemDeptList(ctx context.Context, req *pasturePb.Se
 		pref.Where("is_show = ?", req.IsShow)
 	}
 
-	if err := pref.Order("sort desc").Count(&count).Limit(int(pagination.PageSize)).Offset(int(pagination.PageOffset)).
+	if err := pref.Order("sort desc").
+		Count(&count).
+		Limit(int(pagination.PageSize)).
+		Offset(int(pagination.PageOffset)).
 		Find(&deptList).Error; err != nil {
 		return nil, xerr.WithStack(err)
 	}
@@ -616,7 +625,12 @@ func (s *StoreEntry) SearchSystemDeptList(ctx context.Context, req *pasturePb.Se
 	return &pasturePb.SearchDeptResponse{
 		Code: http.StatusOK,
 		Msg:  "ok",
-		Data: model.SystemDeptSlice(deptList).ToPB(systemUserList),
+		Data: &pasturePb.DeptData{
+			List:     model.SystemDeptSlice(deptList).ToPB(systemUserList),
+			Total:    int32(count),
+			PageSize: pagination.PageSize,
+			Page:     pagination.Page,
+		},
 	}, nil
 }
 

+ 5 - 1
module/crontab/pen_behavior.go

@@ -33,7 +33,11 @@ func (e *Entry) UpdatePenBehavior() error {
 
 // PenBehaviorEnter 栏舍行为曲线 对数据进行查缺补漏
 func (e *Entry) PenBehaviorEnter(pastureId int64, days int) {
-	minHeatDate := time.Now().Local().AddDate(0, 0, -days).Format(model.LayoutDate2)
+	nowTime := time.Now().Local()
+	if nowTime.Hour() == 1 || nowTime.Hour() == 2 {
+		days = 1
+	}
+	minHeatDate := nowTime.AddDate(0, 0, -days).Format(model.LayoutDate2)
 	e.PenBehavior(pastureId, minHeatDate)
 	e.UpdatePenBehaviorWeekData(pastureId, minHeatDate)
 	newDays := days - 1

+ 19 - 0
util/util.go

@@ -18,6 +18,7 @@ const (
 	LetterIdxBits = 6                    // 6 bits to represent a letter index
 	LetterIdxMask = 1<<LetterIdxBits - 1 // All 1-bits, as many as letterIdxBits
 	LetterIdxMax  = 63 / LetterIdxBits   // # of letter indices fitting in 63 bits
+	NumberVBytes  = "0123456789"
 )
 
 var (
@@ -98,6 +99,24 @@ func GenerateRandomNumberString(n int) string {
 	return string(result)
 }
 
+func GenerateRandomNumber(n int) string {
+	result := make([]byte, n)
+	// A rand.Int63() generates 63 random bits, enough for letterIdxMax characters!
+	rand.Seed(time.Now().Local().UnixNano())
+	for i, cache, remain := n-1, rand.Int63(), LetterIdxMax; i >= 0; {
+		if remain == 0 {
+			cache, remain = rand.Int63(), LetterIdxMax
+		}
+		if idx := int(cache & LetterIdxMask); idx < len(NumberVBytes) {
+			result[i] = NumberVBytes[idx]
+			i--
+		}
+		cache >>= LetterIdxBits
+		remain--
+	}
+	return string(result)
+}
+
 // TimeParseLocalUnix 获取当天零点的时间戳
 // eg 2023-02-22 => 1676995200
 func TimeParseLocalUnix(DayTime string) int64 {

+ 1 - 1
util/util_test.go

@@ -539,7 +539,7 @@ func Test_demo(t *testing.T) {
 		if frameId%10 == 8 {
 			continue
 		}
-		fmt.Println("x", frameId)
+		fmt.Println(GenerateRandomNumber(int(frameId)))
 	}
 
 }

+ 1 - 0
util/util_test1.go

@@ -0,0 +1 @@
+package util