公共参数自动注入, 增加参数是否已赋值检测 #18
@ -53,7 +53,9 @@ func (s *server) injectCommonParam(ctx *gin.Context, formValue any) error {
 | 
				
			|||||||
	fieldTable := map[string]bool{}
 | 
						fieldTable := map[string]bool{}
 | 
				
			||||||
	fieldNum := reflectType.Elem().NumField()
 | 
						fieldNum := reflectType.Elem().NumField()
 | 
				
			||||||
	for i := 0; i < fieldNum; i++ {
 | 
						for i := 0; i < fieldNum; i++ {
 | 
				
			||||||
		if reflectType.Elem().Field(i).Anonymous && ((reflectType.Elem().Field(i).Type.Kind() == reflect.Ptr && reflectType.Elem().Field(i).Type.Kind() == reflect.Struct) || reflectType.Elem().Field(i).Type.Kind() == reflect.Struct) {
 | 
							if reflectType.Elem().Field(i).Anonymous && // 是匿名字段, 再做一次解析
 | 
				
			||||||
 | 
								((reflectType.Elem().Field(i).Type.Kind() == reflect.Ptr && reflectType.Elem().Field(i).Type.Kind() == reflect.Struct) || // 结构体指针
 | 
				
			||||||
 | 
									reflectType.Elem().Field(i).Type.Kind() == reflect.Struct) { // 结构体
 | 
				
			||||||
			anonymousFieldType := reflectType.Elem().Field(i).Type
 | 
								anonymousFieldType := reflectType.Elem().Field(i).Type
 | 
				
			||||||
			if anonymousFieldType.Kind() == reflect.Ptr {
 | 
								if anonymousFieldType.Kind() == reflect.Ptr {
 | 
				
			||||||
				anonymousFieldType = anonymousFieldType.Elem()
 | 
									anonymousFieldType = anonymousFieldType.Elem()
 | 
				
			||||||
@ -75,6 +77,16 @@ func (s *server) injectCommonParam(ctx *gin.Context, formValue any) error {
 | 
				
			|||||||
			}).ToFieldList()...)
 | 
								}).ToFieldList()...)
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							fieldValue := reflectFormValue.Elem().FieldByName(fieldName)
 | 
				
			||||||
 | 
							if !fieldValue.IsZero() {
 | 
				
			||||||
 | 
								// 表单次数不为空, 说明从参数中传递, 不做覆盖填充
 | 
				
			||||||
 | 
								logger.Instance.Debug("指定字段已赋值, 不做重新覆盖填充处理, 跳过", pkgLogger.NewLogData(innerCtx, logger.RecordType, logger.CodeInjectCommonParam, map[string]any{
 | 
				
			||||||
 | 
									"field_name":       fieldName,
 | 
				
			||||||
 | 
									"struct":           reflectFormValue.Elem().Type().String(),
 | 
				
			||||||
 | 
									"input_form_value": fieldValue.Interface(),
 | 
				
			||||||
 | 
								}).ToFieldList()...)
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		if val, err = getParamFunc(ctx); nil != err {
 | 
							if val, err = getParamFunc(ctx); nil != err {
 | 
				
			||||||
			logger.Instance.Error("获取公共结构体字段参数值失败", pkgLogger.NewLogData(innerCtx, logger.RecordType, logger.CodeInjectCommonParam, map[string]any{
 | 
								logger.Instance.Error("获取公共结构体字段参数值失败", pkgLogger.NewLogData(innerCtx, logger.RecordType, logger.CodeInjectCommonParam, map[string]any{
 | 
				
			||||||
				"field_name": fieldName,
 | 
									"field_name": fieldName,
 | 
				
			||||||
@ -82,7 +94,6 @@ func (s *server) injectCommonParam(ctx *gin.Context, formValue any) error {
 | 
				
			|||||||
			}).ToFieldList()...)
 | 
								}).ToFieldList()...)
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		fieldValue := reflectFormValue.Elem().FieldByName(fieldName)
 | 
					 | 
				
			||||||
		if !fieldValue.CanSet() {
 | 
							if !fieldValue.CanSet() {
 | 
				
			||||||
			logDataList := pkgLogger.NewLogData(util.GinCtxToContext(ctx), logger.RecordType, logger.CodeInjectCommonParam, map[string]any{
 | 
								logDataList := pkgLogger.NewLogData(util.GinCtxToContext(ctx), logger.RecordType, logger.CodeInjectCommonParam, map[string]any{
 | 
				
			||||||
				"field_name": fieldName,
 | 
									"field_name": fieldName,
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user