package logic import ( "encoding/json" "errors" "ik3cloud/app/common" "ik3cloud/app/config" "ik3cloud/app/lib/ik3cloud" "time" ik3cloud2 "git.kumo.work/shama/service/ik3cloud" "git.kumo.work/shama/service/ik3cloud/constant" ) var DepartmentLogic = &departmentLogic{} type departmentLogic struct { } type departmentItem struct { Id int64 `json:"FDEPTID"` Number *string `json:"FNumber"` Name *string `json:"FName"` ParentNumber *string `json:"FParentID.FNumber"` ParentName *string `json:"FParentID.FName"` } // All @TITLE 全部部门 func (d *departmentLogic) All() (result []ik3cloud2.DepartmentItem, err error) { raw, err := ik3cloud.Client.BillQuery(map[string]any{ "FormId": constant.ActionDepartment, "FieldKeys": "FNumber,FName,FParentID.FNumber,FParentID.FName,FDEPTID", "FilterString": []map[string]any{{ "FieldName": "FUseOrgId.FNumber", "Compare": "67", "Value": config.Config.Ik3cloud.OrganizationNumber, "Left": "", "Right": "", "Logic": "", }}, }) if err != nil { return } var data []departmentItem if err = json.Unmarshal(raw, &data); err != nil { return } for _, item := range data { result = append(result, ik3cloud2.DepartmentItem{ Number: item.Number, Name: item.Name, ParentNumber: item.ParentNumber, ParentName: item.ParentName, Id: item.Id, }) } return d.getTree(result), nil } // Add @TITLE 添加部门 func (d *departmentLogic) Add(data ik3cloud2.ArgsDepartmentAdd) (entity ik3cloud2.Entity, err error) { return ik3cloud.Client.Save(constant.ActionDepartment, nil, map[string]any{ "FCreateOrgId": map[string]any{ "FNumber": config.Config.Ik3cloud.OrganizationNumber, }, "FNumber": data.Number, "FName": data.Name, "FUseOrgId": map[string]any{ "FNumber": config.Config.Ik3cloud.OrganizationNumber, }, "FEffectDate": time.Now().Format("2006-01-02 15:04:05"), "FLapseDate": "9999-12-31 00:00:00", "FGroup": map[string]any{ "FNumber": data.GroupNumber, }, "FParentID": map[string]any{ "FNumber": data.ParentNumber, }, "FIsCopyFlush": false, "FIsDetailDpt": false, }) } // Edit @TITLE 编辑部门 func (d *departmentLogic) Edit(departmentId int64, data ik3cloud2.ArgsDepartmentAdd) error { if departmentId == 0 { return errors.New("部门错误") } if _, err := ik3cloud.Client.Save(constant.ActionDepartment, []string{"FName", "FNumber", "FParentID.FNumber"}, map[string]any{ "FDEPTID": departmentId, "FNumber": data.Number, "FName": data.Name, "FParentID": map[string]any{ "FNumber": data.ParentNumber, }, }); err != nil { return errors.New("部门编辑失败") } return nil } // Delete @TITLE 删除部门 func (d *departmentLogic) Delete(numbers []string, ids []int64) error { return ik3cloud.Client.Delete(constant.ActionDepartment, numbers, ids) } // @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 }