| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -8,9 +8,12 @@
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				package router
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import (
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					"errors"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					"reflect"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					"git.zhangdeman.cn/zhangdeman/gin/logger"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					"git.zhangdeman.cn/zhangdeman/gin/util"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					pkgLogger "git.zhangdeman.cn/zhangdeman/logger"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					"github.com/gin-gonic/gin"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -31,6 +34,12 @@ func (s *server) AddCommonParamRules(rules map[string]GetCommonParam) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				// injectCommonParam 注入公共参数
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				func (s *server) injectCommonParam(ctx *gin.Context, formValue any) error {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					innerCtx := util.GinCtxToContext(ctx)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					var (
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						val any
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						err error
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					reflectType := reflect.TypeOf(formValue)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					fieldTable := map[string]bool{}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					fieldNum := reflectType.Elem().NumField()
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -42,12 +51,40 @@ func (s *server) injectCommonParam(ctx *gin.Context, formValue any) error {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					for fieldName, getParamFunc := range s.commonParam {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if _, ok := fieldTable[fieldName]; !ok {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							// 结构体字段未配置自动注入
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							logger.Instance.Debug("当前结构体不包含指定字段, 忽略执行", pkgLogger.NewLogData(innerCtx, logger.RecordType, logger.CodeInjectCommonParam, map[string]any{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								"field_name": fieldName,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								"struct":     reflectValue.Elem().Type().String(),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							}).ToFieldList()...)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							continue
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if val, err := getParamFunc(ctx); nil != err {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							logger.Instance.Error("inject common param failed")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if val, err = getParamFunc(ctx); nil != err {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							logger.Instance.Error("获取公共结构体字段参数值失败", pkgLogger.NewLogData(innerCtx, logger.RecordType, logger.CodeInjectCommonParam, map[string]any{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								"field_name": fieldName,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								"err_msg":    err.Error(),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							}).ToFieldList()...)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							return err
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						reflectValue.Elem().FieldByName(fieldName)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						fieldValue := reflectValue.Elem().FieldByName(fieldName)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if !fieldValue.CanSet() {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							logDataList := pkgLogger.NewLogData(util.GinCtxToContext(ctx), logger.RecordType, logger.CodeInjectCommonParam, map[string]any{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								"field_name": fieldName,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								"field_type": fieldValue.Type().String(),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							})
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							logger.Instance.Error("结构体字段不可设置值", logDataList.ToFieldList()...)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							return errors.New(fieldName + ": 结构体字段不可设置值")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						reflectVal := reflect.ValueOf(val)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if reflectVal.Type() != fieldValue.Type() {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							logDataList := pkgLogger.NewLogData(util.GinCtxToContext(ctx), logger.RecordType, logger.CodeInjectCommonParam, map[string]any{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								"field_name": fieldName,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								"field_type": fieldValue.Type().String(),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								"value_type": reflectVal.Type().String(),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							})
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							logger.Instance.Error("返回数据类型与字段类型不一致", logDataList.ToFieldList()...)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							return errors.New(fieldName + ": 字段自动注入, 返回数据类型与字段类型不一致")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						// 设置值
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						fieldValue.Set(reflectVal)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					return nil
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
	
		
			
				
					
					| 
						 
							
							
							
						 
					 | 
				
			
			 | 
			 | 
			
				
 
 |