caipin 3 anni fa
parent
commit
eb3d2b002d

+ 98 - 7
dao/project_account_dao.go

@@ -8,6 +8,8 @@ package dao
 
 import (
 	"errors"
+	"log"
+	"time"
 
 	"github.com/go-xorm/xorm"
 	"go.mod/models"
@@ -151,14 +153,103 @@ func (d *ProjectAccountDao) Search(name string, projectId int) []models.CmProjec
 	}
 }
 
-func (d *ProjectAccountDao) JlSync(accountList []map[string]interface{}) error {
-	// for _, data := range accountList {
-	// 	//if data.IsAdmin != 1 {
-	// 	account := comm.MakeProjectAccountVM(&data)
+// 同步计量账号
+func (d *ProjectAccountDao) JlSync(accountList []map[string]interface{}, projectId int) error {
+
+	var (
+		accountName   string
+		err           error
+		flag          bool
+		accountItemId int
+	)
+
+	accountListNow := make([]models.CmProjectAccount, 0)
+	err = d.engine.
+		Where("project_id=? ", projectId).
+		Find(&accountListNow)
+
+	session := d.engine.NewSession()
+	defer session.Close()
+	err = session.Begin()
+	if err != nil {
+		return errors.New("同步出错-db")
+	}
+
+	// 库里没有账号数据,全部新增
+	if len(accountListNow) == 0 {
+		for _, item := range accountList {
+			accountGroup := int(item["accountGroup"].(float64))
+			// 新增
+			account := &models.CmProjectAccount{}
+			account.JlAuth = 1
+			account.ProjectId = projectId
+			account.Account = item["account"].(string)
+			account.Password = "JL"
+			account.AccountGroup = accountGroup
+			account.Name = item["name"].(string)
+			account.Company = item["company"].(string)
+			account.Position = item["role"].(string)
+			account.Mobile = item["mobile"].(string)
+			account.Telephone = item["telephone"].(string)
+			account.Enable = 1
+			account.CreateTime = time.Now()
+			if _, err = session.Insert(account); err != nil {
+				session.Rollback()
+				log.Println("同步计量账号新增 error=", err)
+				return errors.New("创建账号出错")
+			}
+		}
+		// 有数据 存在的授权,不存新增
+	} else {
+		for _, item := range accountList {
+			accountGroup := int(item["accountGroup"].(float64))
+			accountName = item["account"].(string)
+			flag = false
+			for _, accountItem := range accountListNow {
+				// 已存在相同账号
+				if accountItem.Account == accountName {
+					accountItemId = accountItem.Id
+					flag = true
+					break
+				}
+			}
+			if flag {
+				if _, err = session.Exec("UPDATE cm_project_account SET `jl_auth` = 1 where id = ? ", accountItemId); err != nil {
+					session.Rollback()
+					log.Println("同步计量账号 授权 error=", err)
+					return errors.New("账号授权出错")
+				}
+			} else {
+				// 新增
+				account := &models.CmProjectAccount{}
+				account.JlAuth = 1
+				account.ProjectId = projectId
+				account.Account = accountName
+				account.Password = "JL"
+				account.AccountGroup = accountGroup
+				account.Name = item["name"].(string)
+				account.Company = item["company"].(string)
+				account.Position = item["role"].(string)
+				account.Mobile = item["mobile"].(string)
+				account.Telephone = item["telephone"].(string)
+				account.Enable = 1
+				account.CreateTime = time.Now()
+				if _, err = session.Insert(account); err != nil {
+					session.Rollback()
+					log.Println("同步计量账号新增 error=", err)
+					return errors.New("创建账号出错")
+				}
+			}
+		}
+	}
+
+	// 过滤已存在的账号-项目但没有授权的,设置为授权
+
+	if err = session.Commit(); err != nil {
+		session.Rollback()
+		return errors.New("移动出错-db")
+	}
 
-	// 	accountListVM = append(accountListVM, account)
-	// 	//}
-	// }
 	return nil
 }
 

+ 15 - 9
lib/jlzf.go

@@ -37,6 +37,12 @@ type dataResult struct {
 	Project map[string]interface{} `json:"project" `
 }
 
+type jlAccountResult struct {
+	Code int                      `json:"code" `
+	Data []map[string]interface{} `json:"Data" `
+	Msg  string                   `json:"msg" `
+}
+
 //创建项目用户service
 func NewJlzf() *Jlzf {
 	// 自动识别开发环境和生产环境
@@ -66,10 +72,10 @@ func makeTokenString(claimsData jwt.MapClaims) (string, error) {
 // 按项目编号获得计量账号
 func (j *Jlzf) GetAccountList(code string) ([]map[string]interface{}, error) {
 	var (
-		tokenString string
-		err         error
-		resultByte  []byte
-		jlResult    jlResult
+		tokenString     string
+		err             error
+		resultByte      []byte
+		jlAccountResult jlAccountResult
 	)
 	// 1.生成请求数据
 	expirationTime := time.Now().Add(3 * time.Second)
@@ -89,16 +95,16 @@ func (j *Jlzf) GetAccountList(code string) ([]map[string]interface{}, error) {
 		return nil, errors.New(fmt.Sprintf("计量错误,err= %s", err))
 	}
 
-	err = json.Unmarshal(resultByte, &jlResult)
+	err = json.Unmarshal(resultByte, &jlAccountResult)
 	if err != nil {
 		log.Println("请求解析失败, error=", err)
 		return nil, errors.New("解析数据错误")
 	}
-	if jlResult.Code != 0 {
-		return nil, errors.New(fmt.Sprintf("%s", jlResult.Msg))
+	if jlAccountResult.Code != 0 {
+		return nil, errors.New(fmt.Sprintf("%s", jlAccountResult.Msg))
 	}
-	accountList := make([]map[string]interface{}, 0)
-	return accountList, nil
+
+	return jlAccountResult.Data, nil
 }
 
 // 拉取计量项目信息

+ 2 - 3
services/project_account_service.go

@@ -407,14 +407,13 @@ func (s *projectAccountService) SyncAccountBs(projectId int) error {
 		return errors.New("项目不存在")
 	}
 
-	// 获得计量 -TODO
+	// 获得计量
 	Jlzf := lib.NewJlzf()
 	if accountList, err = Jlzf.GetAccountList(projectData.Code); err != nil {
 		return err
 	}
 
-	// 同步账号数据
-	if err = s.dao.JlSync(accountList); err != nil {
+	if err = s.dao.JlSync(accountList, projectId); err != nil {
 		return err
 	}
 

+ 25 - 0
web/api/login_api.go

@@ -57,6 +57,31 @@ func (c *LoginApi) Post() {
 	})
 }
 
+// 获得登陆账号信息
+func (c *LoginApi) GetAccount() {
+
+	var (
+		accountId   int
+		err         error
+		accountData viewmodels.ProjectInfo
+	)
+
+	if accountId, err = utils.GetProjectAccountId(c.Ctx); err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
+		return
+	}
+	if accountData, err = c.ServiceProjectAccount.GetProjectInfo(accountId); err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
+		return
+	}
+
+	c.Ctx.JSON(iris.Map{
+		"code": 0,
+		"msg":  "",
+		"data": accountData,
+	})
+}
+
 // @Summary 登出
 // @Tags 登录/登出
 // @Accept  json

+ 1 - 1
web/backstage/project_account_bs.go

@@ -193,7 +193,7 @@ func (c *ProjectAccountBs) PostSync() {
 		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
 		return
 	}
-	c.Ctx.JSON(iris.Map{"code": 0, "msg": "新增成功"})
+	c.Ctx.JSON(iris.Map{"code": 0, "msg": "同步成功"})
 
 }
 

+ 30 - 0
web/external/jl_ex.go

@@ -11,6 +11,9 @@ import (
 
 	"github.com/kataras/iris/v12"
 	"github.com/spf13/viper"
+	"go.mod/dao"
+	"go.mod/datasource"
+	"go.mod/lib"
 	"go.mod/services"
 	"go.mod/web/utils"
 	"go.mod/web/viewmodels"
@@ -217,6 +220,33 @@ func (c *JlEx) PostAccountUpdate() {
 	})
 }
 
+// 批量同步计量账号
+func (c *JlEx) PostSync() {
+
+	// // 是否有该项目
+	// _, err = c.ServiceProject.Get(projectId)
+	// if err != nil {
+	// 	c.Ctx.JSON(iris.Map{"code": -1, "msg": "项目不存在"})
+	// 	return
+	// }
+
+	var (
+		accountList []map[string]interface{}
+		err         error
+	)
+
+	// 获得计量 -TODO
+	Jlzf := lib.NewJlzf()
+	if accountList, err = Jlzf.GetAccountList("P0301"); err != nil {
+		fmt.Println(err)
+	}
+	dao := dao.NewProjectAccountDao(datasource.InstanceDbMaster())
+	if err = dao.JlSync(accountList, 85); err != nil {
+		fmt.Println(err)
+	}
+
+}
+
 func getEnvInfo(env string) bool {
 	viper.AutomaticEnv()
 	return viper.GetBool(env)