|
|
@@ -8,12 +8,14 @@ import (
|
|
|
"encoding/json"
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
+
|
|
|
"gogs.baozhida.cn/zoie/OAuth-core/service"
|
|
|
"gorm.io/gorm"
|
|
|
"gorm.io/gorm/clause"
|
|
|
|
|
|
"cold-delivery/app/admin/model"
|
|
|
"cold-delivery/app/admin/service/dto"
|
|
|
+
|
|
|
"gogs.baozhida.cn/zoie/OAuth-core/pkg"
|
|
|
)
|
|
|
|
|
|
@@ -273,6 +275,109 @@ func (e *Company) Remove(d *dto.CompanyDeleteReq, p *actions.DataPermission) err
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+// GetCompanyTreeByTKey 根据T_name获取公司树结构
|
|
|
+func (e *Company) GetCompanyTreeByTname(T_name string) (data []nats_server.Company_R, err error) {
|
|
|
+ data, err = nats_server.Cold_CompanyTreeByT_name(T_name)
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("获取公司树失败: %s", err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ return data, nil
|
|
|
+}
|
|
|
+
|
|
|
+// ImportThirdCompanyTree 批量导入第三方平台公司树结构
|
|
|
+// Id -> ColdPid
|
|
|
+// T_key -> ColdKey
|
|
|
+func (e *Company) ImportThirdCompanyTree(nodes []dto.ThirdCompanyTreeReq) (err error) {
|
|
|
+ tx := e.Orm.Begin()
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ tx.Rollback()
|
|
|
+ } else {
|
|
|
+ tx.Commit()
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ for _, node := range nodes {
|
|
|
+ _, err = e.importThirdCompanyNode(tx, node, 0)
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("import third company tree error: %s", err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+// importThirdCompanyNode 递归导入单个节点及其子节点
|
|
|
+func (e *Company) importThirdCompanyNode(tx *gorm.DB, node dto.ThirdCompanyTreeReq, parentDeptId int) (deptId int, err error) {
|
|
|
+ var dept model.SysDept
|
|
|
+
|
|
|
+ // 根据 ColdPid 查找是否已存在
|
|
|
+ dbErr := tx.Where("cold_pid = ?", node.Id).First(&dept).Error
|
|
|
+ if dbErr != nil {
|
|
|
+ if errors.Is(dbErr, gorm.ErrRecordNotFound) {
|
|
|
+ // 新建
|
|
|
+ dept = model.SysDept{}
|
|
|
+ } else {
|
|
|
+ e.Log.Errorf("db error when query by cold_pid: %s", dbErr)
|
|
|
+ return 0, global.GetFailedErr
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ isNew := dept.Id == 0
|
|
|
+
|
|
|
+ dept.Name = node.TName
|
|
|
+ dept.ColdKey = node.TKey
|
|
|
+ dept.ColdPid = node.Id
|
|
|
+ dept.CompanyAddress = node.TAddress
|
|
|
+ dept.ParentId = parentDeptId
|
|
|
+
|
|
|
+ if isNew {
|
|
|
+ err = tx.Create(&dept).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error when create dept: %s", err)
|
|
|
+ return 0, global.CreateFailedErr
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ err = tx.Save(&dept).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error when update dept: %s", err)
|
|
|
+ return 0, global.UpdateFailedErr
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 生成 path
|
|
|
+ deptPath := pkg.IntToString(dept.Id) + "/"
|
|
|
+ if parentDeptId != 0 {
|
|
|
+ var parentDept model.SysDept
|
|
|
+ err = tx.First(&parentDept, parentDeptId).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error when query parent dept: %s", err)
|
|
|
+ return 0, global.GetFailedErr
|
|
|
+ }
|
|
|
+ deptPath = parentDept.Path + deptPath
|
|
|
+ } else {
|
|
|
+ deptPath = "/0/" + deptPath
|
|
|
+ }
|
|
|
+
|
|
|
+ err = tx.Model(&dept).Update("path", deptPath).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error when update dept path: %s", err)
|
|
|
+ return 0, global.UpdateFailedErr
|
|
|
+ }
|
|
|
+
|
|
|
+ // 递归处理子节点
|
|
|
+ for _, child := range node.Children {
|
|
|
+ _, err = e.importThirdCompanyNode(tx, child, dept.Id)
|
|
|
+ if err != nil {
|
|
|
+ return dept.Id, err
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return dept.Id, nil
|
|
|
+}
|
|
|
+
|
|
|
// SetDeptPage 设置Dept页面数据
|
|
|
func (e *Company) SetDeptPage(c *dto.CompanyGetPageReq, p *actions.DataPermission) (m []model.SysDept, err error) {
|
|
|
var list []model.SysDept
|
|
|
@@ -389,6 +494,7 @@ func (e *Company) DeptPageCall(deptList *[]model.SysDept, menu model.SysDept) mo
|
|
|
mi.IsCoolerReleaseCold = list[j].IsCoolerReleaseCold
|
|
|
mi.IsCoolerShow = list[j].IsCoolerShow
|
|
|
mi.IsIceReleaseCold = list[j].IsIceReleaseCold
|
|
|
+ mi.IsOutStorage = list[j].IsOutStorage
|
|
|
mi.CompanyAddress = list[j].CompanyAddress
|
|
|
mi.IceRaftManage = list[j].IceRaftManage
|
|
|
mi.AppName = list[j].AppName
|