feat(ik3cloud): 初始化项目基础配置与部门模块

- 添加 .gitignore 忽略规则
- 实现应用配置加载与管理逻辑
- 添加默认配置文件 app.ini
- 配置 Gitea CI/CD 工作流用于构建和部署
- 实现金蝶云客户端初始化功能
- 添加 RPC 插件支持 Consul 注册中心
- 实现部门数据获取及树形结构处理逻辑
- 添加通用工具函数库
- 初始化 Go 模块依赖管理
- 创建 Dockerfile 用于服务容器化部署
This commit is contained in:
2025-11-19 14:05:23 +08:00
commit 9968887665
23 changed files with 2016 additions and 0 deletions

68
app/logic/department.go Normal file
View File

@@ -0,0 +1,68 @@
package logic
import (
"encoding/json"
"ik3cloud/app/common"
"ik3cloud/app/config"
"ik3cloud/app/lib/ik3cloud"
ik3cloud2 "git.kumo.work/shama/service/ik3cloud"
)
var DepartmentLogic = &departmentLogic{}
type departmentLogic struct {
}
// All @TITLE 全部部门
func (d *departmentLogic) All() (result []ik3cloud2.DepartmentItem, err error) {
raw, err := ik3cloud.Client.ExecuteBillQuery(map[string]interface{}{
"FormId": "BD_Department",
"FieldKeys": "FNumber,FName,FParentID.FNumber,FParentID.FName",
"FilterString": []map[string]interface{}{{
"FieldName": "FUseOrgId.FNumber",
"Compare": "67",
"Value": config.Config.Ik3cloud.OrganizationNumber,
"Left": "",
"Right": "",
"Logic": "",
}},
})
if err != nil {
return
}
var data [][]*string
if err = json.Unmarshal(raw, &data); err != nil {
return
}
for _, item := range data {
result = append(result, ik3cloud2.DepartmentItem{
Number: item[0],
Name: item[1],
ParentNumber: item[2],
ParentName: item[3],
})
}
return d.getTree(result), nil
}
// @Title 获取菜单树
func (d *departmentLogic) getTree(datas []ik3cloud2.DepartmentItem) (result []ik3cloud2.DepartmentItem) {
result = []ik3cloud2.DepartmentItem{}
for i, item := range datas {
if item.ParentNumber != nil {
for index, value := range datas {
if common.PtrCmp(item.ParentNumber, value.Number) {
datas[index].Children = append(datas[index].Children, &datas[i])
break
}
}
}
}
for _, item := range datas {
if item.ParentNumber != nil {
result = append(result, item)
}
}
return
}

101
app/logic/staff.go Normal file
View File

@@ -0,0 +1,101 @@
package logic
import (
"encoding/json"
"ik3cloud/app/common"
"ik3cloud/app/config"
"ik3cloud/app/lib/ik3cloud"
ik3cloud2 "git.kumo.work/shama/service/ik3cloud"
"git.kumo.work/shama/service/lib/bean"
)
var StaffLogic = &staffLogic{}
type staffLogic struct {
}
// List @TITLE 员工列表
func (s *staffLogic) List(page bean.Page, search ik3cloud2.StaffSearch) (list []ik3cloud2.StaffItem, total int64, err error) {
where := []map[string]interface{}{
{
"FieldName": "FCreateOrgId.FNumber",
"Compare": "67",
"Value": config.Config.Ik3cloud.OrganizationNumber,
"Left": "",
"Right": "",
"Logic": 0,
},
}
{
// 搜索
// 状态
if search.Status > 0 {
status := "B"
if search.Status == 1 {
status = "A"
}
where = append(where, map[string]interface{}{
"FieldName": "FForbidStatus",
"Compare": "105",
"Value": status,
"Left": "",
"Right": "",
"Logic": 0,
})
}
// 姓名
if search.Name != "" {
where = append(where, map[string]interface{}{
"FieldName": "FName",
"Compare": "17",
"Value": search.Name,
"Left": "",
"Right": "",
"Logic": 0,
})
}
// 手机号
if search.Phone != "" {
where = append(where, map[string]interface{}{
"FieldName": "FBaseProperty",
"Compare": "17",
"Value": search.Phone,
"Left": "",
"Right": "",
"Logic": 0,
})
}
}
raw, err := ik3cloud.Client.ExecuteBillQuery(map[string]interface{}{
"FormId": "BD_Empinfo",
"FieldKeys": "FNumber,FName,FParentID.FNumber,FParentID.FName",
"FilterString": where,
"StartRow": page.GetStart(),
"Limit": page.GetLimit(),
})
if err != nil {
return
}
var data [][]*string
if err = json.Unmarshal(raw, &data); err != nil {
return
}
for _, item := range data {
status := "禁用"
if common.PtrCmp(item[5], common.Ptr("A")) {
status = "启用"
}
list = append(list, ik3cloud2.StaffItem{
Number: item[0],
Name: item[1],
Position: item[2],
Phone: item[3],
Mobile: item[4],
Status: common.Ptr(status),
})
}
return
}