Browse Source

feat(controls): 添加银行、项目和部门控件信息解析功能

- 定义 BankInfo 结构体用于银行控件信息解析
- 定义 ProjectInfo 结构体用于项目控件信息解析
- 定义 DeptInfo 结构体用于部门控件信息解析
- 实现 ExtractInfo 泛型函数解析单个控件信息
- 实现 ExtractInfos 泛型函数解析多个控件信息
- 实现 ExtractInfoFormInfos 函数从多个信息中提取第一个
- 添加 JSON 序列化标签支持结构体字段映射
- 集成 strutils 工具包处理字符串空值判断
wangbo 1 week ago
parent
commit
0def39d11f
1 changed files with 74 additions and 0 deletions
  1. 74 0
      controls/controls.go

+ 74 - 0
controls/controls.go

@@ -0,0 +1,74 @@
+package controls
+
+import (
+	"encoding/json"
+	"git.sxidc.com/go-tools/utils/strutils"
+)
+
+type InfoStruct interface {
+	BankInfo
+}
+
+// 银行控件
+type BankInfo struct {
+	ID   string `json:"id"`
+	Name string `json:"name"`
+	Code string `json:"code"`
+}
+
+func ExtractInfo[T InfoStruct](infoStr string) (*T, error) {
+	info := new(T)
+	if strutils.IsStringEmpty(infoStr) {
+		return info, nil
+	}
+
+	err := json.Unmarshal([]byte(infoStr), info)
+	if err != nil {
+		return nil, err
+	}
+	return info, nil
+}
+
+type InfosStruct interface {
+	ProjectInfo | DeptInfo
+}
+
+// 项目控件
+type ProjectInfo struct {
+	ID   string `json:"id"`
+	Name string `json:"name"`
+}
+
+// 部门控件
+type DeptInfo struct {
+	Type string `json:"type"`
+	ID   string `json:"subjectId"`
+	Name string `json:"name"`
+}
+
+func ExtractInfoFormInfos[T InfosStruct](infosStr string) (*T, error) {
+	infos, err := ExtractInfos[T](infosStr)
+	if err != nil {
+		return nil, err
+	}
+
+	if infos == nil || len(infos) == 0 {
+		var info T
+		return &info, nil
+	}
+
+	return &infos[0], nil
+}
+
+func ExtractInfos[T InfosStruct](infosStr string) ([]T, error) {
+	infos := make([]T, 0)
+	if strutils.IsStringEmpty(infosStr) {
+		return infos, nil
+	}
+
+	err := json.Unmarshal([]byte(infosStr), &infos)
+	if err != nil {
+		return nil, err
+	}
+	return infos, nil
+}