- 添加部门新增、编辑、删除接口及逻辑实现 - 添加员工新增、编辑、启用、禁用、删除接口及逻辑实现 - 更新配置文件支持组织ID配置 - 初始化金蝶客户端连接配置 - 优化部门与员工数据查询结构 - 增加提交、审核、反审等业务流程处理 - 完善错误处理与日志记录机制
248 lines
6.4 KiB
Go
248 lines
6.4 KiB
Go
package logic
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"ik3cloud/app/common"
|
|
"ik3cloud/app/config"
|
|
"ik3cloud/app/lib/ik3cloud"
|
|
"ik3cloud/app/lib/logger"
|
|
"strings"
|
|
"time"
|
|
|
|
ik3cloud2 "git.kumo.work/shama/service/ik3cloud"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
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": "BD_Department",
|
|
"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) (departmentId int64, err error) {
|
|
raw, err := ik3cloud.Client.Save("BD_Department", map[string]any{
|
|
"Model": 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,
|
|
},
|
|
})
|
|
if err != nil {
|
|
err = errors.New("添加部门失败")
|
|
return
|
|
}
|
|
result, err := ik3cloud.Client.GetResult(raw)
|
|
if err != nil {
|
|
err = errors.New("添加部门失败")
|
|
return
|
|
}
|
|
if !result.Result.ResponseStatus.IsSuccess {
|
|
for _, item := range result.Result.ResponseStatus.Errors {
|
|
return departmentId, errors.New(item.Message)
|
|
}
|
|
}
|
|
departmentId = result.Result.Id
|
|
if err1 := d.submit([]string{data.Number}); err1 != nil {
|
|
logger.Logger.Error("部门提交失败", zap.Error(err1))
|
|
return
|
|
}
|
|
if err1 := d.audit([]string{data.Number}); err1 != nil {
|
|
logger.Logger.Error("部门审核失败", zap.Error(err1))
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
// Edit @TITLE 编辑部门
|
|
func (d *departmentLogic) Edit(departmentId int64, data ik3cloud2.ArgsDepartmentAdd) error {
|
|
if departmentId == 0 {
|
|
return errors.New("部门错误")
|
|
}
|
|
raw, err := ik3cloud.Client.Save("BD_Department", map[string]any{
|
|
"NeedUpDateFields": []string{"FName", "FNumber", "FParentID.FNumber"},
|
|
"Model": map[string]any{
|
|
"FDEPTID": departmentId,
|
|
"FNumber": data.Number,
|
|
"FName": data.Name,
|
|
"FParentID": map[string]any{
|
|
"FNumber": data.ParentNumber,
|
|
},
|
|
},
|
|
})
|
|
if err != nil {
|
|
return errors.New("编辑部门失败")
|
|
}
|
|
result, _ := ik3cloud.Client.GetResult(raw)
|
|
if !result.Result.ResponseStatus.IsSuccess {
|
|
for _, item := range result.Result.ResponseStatus.Errors {
|
|
return errors.New(item.Message)
|
|
}
|
|
return errors.New("编辑部门失败")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Delete @TITLE 删除部门
|
|
func (d *departmentLogic) Delete(numbers []string) error {
|
|
if err := d.unAudit(numbers); err != nil {
|
|
logger.Logger.Error("部门反审失败", zap.Error(err))
|
|
}
|
|
raw, err := ik3cloud.Client.Delete("BD_Department", map[string]any{
|
|
"CreateOrgId": config.Config.Ik3cloud.OrganizationId,
|
|
"Numbers": strings.Join(numbers, ","),
|
|
})
|
|
if err != nil {
|
|
return errors.New("删除部门失败")
|
|
}
|
|
result, err := ik3cloud.Client.GetResult(raw)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !result.Result.ResponseStatus.IsSuccess {
|
|
for _, item := range result.Result.ResponseStatus.Errors {
|
|
return errors.New(item.Message)
|
|
}
|
|
}
|
|
return 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
|
|
}
|
|
|
|
// @Title 提交
|
|
func (d *departmentLogic) submit(numbers []string) error {
|
|
raw, err := ik3cloud.Client.Submit("BD_Department", map[string]any{
|
|
"CreateOrgId": config.Config.Ik3cloud.OrganizationId,
|
|
"Numbers": strings.Join(numbers, ","),
|
|
})
|
|
if err != nil {
|
|
return errors.New("部门提交失败")
|
|
}
|
|
result, err := ik3cloud.Client.GetResult(raw)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !result.Result.ResponseStatus.IsSuccess {
|
|
for _, item := range result.Result.ResponseStatus.Errors {
|
|
return errors.New(item.Message)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// @Title 审核
|
|
func (d *departmentLogic) audit(numbers []string) error {
|
|
raw, err := ik3cloud.Client.Audit("BD_Department", map[string]any{
|
|
"CreateOrgId": config.Config.Ik3cloud.OrganizationId,
|
|
"Numbers": strings.Join(numbers, ","),
|
|
})
|
|
if err != nil {
|
|
return errors.New("部门审核失败")
|
|
}
|
|
result, err := ik3cloud.Client.GetResult(raw)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !result.Result.ResponseStatus.IsSuccess {
|
|
for _, item := range result.Result.ResponseStatus.Errors {
|
|
return errors.New(item.Message)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// @Title 反审
|
|
func (d *departmentLogic) unAudit(numbers []string) error {
|
|
raw, err := ik3cloud.Client.UnAudit("BD_Department", map[string]any{
|
|
"CreateOrgId": config.Config.Ik3cloud.OrganizationId,
|
|
"Numbers": strings.Join(numbers, ","),
|
|
})
|
|
if err != nil {
|
|
return errors.New("部门反审失败")
|
|
}
|
|
result, err := ik3cloud.Client.GetResult(raw)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !result.Result.ResponseStatus.IsSuccess {
|
|
for _, item := range result.Result.ResponseStatus.Errors {
|
|
return errors.New(item.Message)
|
|
}
|
|
}
|
|
return nil
|
|
}
|