|
@@ -8,17 +8,19 @@ package services
|
|
|
|
|
|
import (
|
|
|
"errors"
|
|
|
- "fmt"
|
|
|
"net/http"
|
|
|
"net/url"
|
|
|
"strconv"
|
|
|
+ "time"
|
|
|
|
|
|
+ "github.com/dgrijalva/jwt-go"
|
|
|
"go.mod/comm"
|
|
|
"go.mod/conf"
|
|
|
"go.mod/dao"
|
|
|
"go.mod/datasource"
|
|
|
"go.mod/lib"
|
|
|
"go.mod/models"
|
|
|
+ "go.mod/web/utils"
|
|
|
"go.mod/web/viewmodels"
|
|
|
)
|
|
|
|
|
@@ -52,94 +54,179 @@ func (s *JlService) IsCode(code string) map[string]interface{} {
|
|
|
return data
|
|
|
}
|
|
|
|
|
|
-// 从计量来的项目和管理员账号,添加入项目管理
|
|
|
+// 从计量 创建 项目和管理员账号
|
|
|
func (s *JlService) ProjectAdd(claimsData *viewmodels.Jl) (map[string]interface{}, error) {
|
|
|
|
|
|
var (
|
|
|
- err error
|
|
|
- JlResultData map[string]interface{}
|
|
|
- accountData *models.CmProjectAccount
|
|
|
+ err error
|
|
|
+ JlResultProject map[string]interface{}
|
|
|
+ JlResultAccount map[string]interface{}
|
|
|
+ accountData *models.CmProjectAccount
|
|
|
+ sync int
|
|
|
)
|
|
|
|
|
|
+ sync = 0
|
|
|
Jlzf := lib.NewJlzf()
|
|
|
// 1.获得计量 账号和项目 信息
|
|
|
- if JlResultData, err = Jlzf.GetProjectAndAccount(claimsData.Code, claimsData.Account); err != nil {
|
|
|
+ if JlResultProject, JlResultAccount, err = Jlzf.GetProjectAndAccount(claimsData.Code, claimsData.Account); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
- fmt.Println(JlResultData)
|
|
|
+ accountGroup := int(JlResultAccount["accountGroup"].(float64))
|
|
|
|
|
|
- // 2.获得本地项目
|
|
|
- projectData := s.dao.GetCode(claimsData.Code)
|
|
|
- // 项目不存在
|
|
|
- if projectData.Id == 0 {
|
|
|
- // 2-1. 创建项目和账号 TODO
|
|
|
- project := &models.CmProject{}
|
|
|
+ // fmt.Println(JlResultProject)
|
|
|
+ // fmt.Println(JlResultAccount)
|
|
|
+ // 2. 计量账号 是否是管理员
|
|
|
+ // 管理员 --只能管理员才能创建项目
|
|
|
+ if JlResultAccount["isAdmin"].(float64) == 1 {
|
|
|
+ // 2-1. 获得本地项目
|
|
|
+ projectData := s.dao.GetCode(claimsData.Code)
|
|
|
+ // 2-1-1.项目不存在(账号肯定不存在) - 创建项目
|
|
|
+ if projectData.Id == 0 {
|
|
|
+ //组合数据-项目 - 标注授权开启互通
|
|
|
+ categoryId := strconv.FormatFloat(JlResultProject["categoryId"].(float64), 'f', 0, 64)
|
|
|
|
|
|
- account := &models.CmProjectAccount{}
|
|
|
- if err = s.dao.AddProjectAndAccount(project, account); err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
- // project := &models.CmProject{}
|
|
|
- // project.Name = projectVM.Name
|
|
|
- // project.Code = projectVM.Code
|
|
|
- // project.CategoryId = projectVM.CategoryId
|
|
|
- // project.Category = projectVM.Category
|
|
|
- // project.InsideCategoryid = projectVM.InsideCategoryid
|
|
|
- // project.InsideCategory = projectVM.InsideCategory
|
|
|
- // project.StaffId = projectVM.StaffId
|
|
|
- // project.StaffName = projectVM.StaffName
|
|
|
- // project.CreateTime = time.Now()
|
|
|
- // project.CreateName = projectVM.CreateName
|
|
|
- // project.CreateCategory = projectVM.CreateCategory
|
|
|
- // project.Remark = projectVM.Remark
|
|
|
+ project := &models.CmProject{}
|
|
|
+ project.Name = JlResultProject["name"].(string)
|
|
|
+ project.Code = JlResultProject["code"].(string)
|
|
|
|
|
|
- } else {
|
|
|
- // 2-2. 是否有该账号
|
|
|
- accountData = s.accountDao.GetAccountProjectId(claimsData.Account, projectData.Id)
|
|
|
- // 2-2-1 账号不存在
|
|
|
- if accountData.Id == 0 {
|
|
|
- // 2-2-2. 创建 账号 TODO
|
|
|
+ project.StaffName = JlResultProject["staff"].(string)
|
|
|
+ project.CategoryId = categoryId
|
|
|
+ project.Category = JlResultProject["category"].(string)
|
|
|
+ project.InsideCategoryid = categoryId
|
|
|
+ project.InsideCategory = JlResultProject["category"].(string)
|
|
|
+ project.CreateTime = time.Now()
|
|
|
+ project.CreateName = "计量授权创建"
|
|
|
+ project.JlReciprocate = 1
|
|
|
+
|
|
|
+ //组合数据-账号 - 标注 计量授权账号-设置为管理员
|
|
|
account := &models.CmProjectAccount{}
|
|
|
- if err = s.accountDao.Add(account); err != nil {
|
|
|
+ account.Account = JlResultAccount["account"].(string)
|
|
|
+ account.Password = "JL"
|
|
|
+ account.AccountGroup = accountGroup
|
|
|
+ account.Name = JlResultAccount["name"].(string)
|
|
|
+ account.Company = JlResultAccount["company"].(string)
|
|
|
+ account.Position = JlResultAccount["role"].(string)
|
|
|
+ account.Mobile = JlResultAccount["mobile"].(string)
|
|
|
+ account.Telephone = JlResultAccount["telephone"].(string)
|
|
|
+ account.Enable = 1
|
|
|
+ account.IsAdmin = 1
|
|
|
+ account.CreateTime = time.Now()
|
|
|
+ account.JlAuth = 1
|
|
|
+
|
|
|
+ // 创建项目和账号
|
|
|
+ if err = s.dao.AddProjectAndAccount(project, account); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ sync = 1
|
|
|
+ } else {
|
|
|
+ // 1.需要开启互通
|
|
|
+ project := &models.CmProject{}
|
|
|
+ project.JlReciprocate = 1
|
|
|
+ project.Id = projectData.Id
|
|
|
+ if err := s.dao.Update(project, []string{"jl_reciprocate"}); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
- data := map[string]interface{}{
|
|
|
- "sync": 1,
|
|
|
+ // 计量授权账号
|
|
|
+ account := &models.CmProjectAccount{}
|
|
|
+ account.JlAuth = 1
|
|
|
+ // 1-2. 获得账号-计量账号在项目管理中
|
|
|
+ accountData = s.accountDao.GetAccountProjectId(claimsData.Account, projectData.Id)
|
|
|
+ // 1-3. 不存在
|
|
|
+ if accountData.Id == 0 {
|
|
|
+ // 管理员-是否存在 ——需求还不明确,是否要设置成管理员 -先不做 ——NOTODO
|
|
|
+ // adminAccount := s.accountDao.GetAdmin(projectData.Id)
|
|
|
+ // 管理员不存在设置管理员
|
|
|
+ // if adminAccount.Id == 0 {
|
|
|
+ // account.IsAdmin = 1
|
|
|
+ // }
|
|
|
+ account.ProjectId = projectData.Id
|
|
|
+ account.Account = JlResultAccount["account"].(string)
|
|
|
+ account.Password = "JL"
|
|
|
+ account.AccountGroup = accountGroup
|
|
|
+ account.Name = JlResultAccount["name"].(string)
|
|
|
+ account.Company = JlResultAccount["company"].(string)
|
|
|
+ account.Position = JlResultAccount["role"].(string)
|
|
|
+ account.Mobile = JlResultAccount["mobile"].(string)
|
|
|
+ account.Telephone = JlResultAccount["telephone"].(string)
|
|
|
+ account.Enable = 1
|
|
|
+ account.CreateTime = time.Now()
|
|
|
+ if err := s.accountDao.Add(account); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 存在
|
|
|
+ account.Id = accountData.Id
|
|
|
+ if err := s.accountDao.Update(account, []string{"jl_auth"}); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sync = 1
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //2-2. 普通账号
|
|
|
+ return nil, errors.New("只能由 管理员 创建 项目管理项目")
|
|
|
}
|
|
|
- return data, nil
|
|
|
+ return map[string]interface{}{"sync": sync}, nil
|
|
|
}
|
|
|
|
|
|
+// 授权登陆
|
|
|
func (s *JlService) AuthLogin(claimsData *viewmodels.Jl, writer http.ResponseWriter) (*viewmodels.ProjectAccount, error) {
|
|
|
+
|
|
|
+ var (
|
|
|
+ err error
|
|
|
+ // JlResultProject map[string]interface{}
|
|
|
+ JlResultAccount map[string]interface{}
|
|
|
+ )
|
|
|
+
|
|
|
// 1-1.工程项目是否存在
|
|
|
projectInfo := s.dao.GetCode(claimsData.Code)
|
|
|
|
|
|
if projectInfo.Id == 0 {
|
|
|
return nil, errors.New("工程建设管理员还未创建项目,禁止登录")
|
|
|
}
|
|
|
- // 1-2.获得项目管理员
|
|
|
- projectAdminInfo := s.accountDao.Get(projectInfo.UserId, projectInfo.Id)
|
|
|
- if projectAdminInfo.Id == 0 {
|
|
|
- return nil, errors.New("工程建设管理员不存在,禁止登录")
|
|
|
+ // // 1-2.获得项目管理员- 授权登陆不需要验证管理员
|
|
|
+ // projectAdminInfo := s.accountDao.Get(projectInfo.UserId, projectInfo.Id)
|
|
|
+ // if projectAdminInfo.Id == 0 {
|
|
|
+ // return nil, errors.New("工程建设管理员不存在,禁止登录")
|
|
|
+ // }
|
|
|
+
|
|
|
+ // 计量 的 项目下 是否存在 账号
|
|
|
+ Jlzf := lib.NewJlzf()
|
|
|
+ // 1.获得计量 账号和项目 信息 - 表示验证通过
|
|
|
+ if _, JlResultAccount, err = Jlzf.GetProjectAndAccount(claimsData.Code, claimsData.Account); err != nil {
|
|
|
+ return nil, errors.New("计量 校验失败-未找到项目或账号")
|
|
|
}
|
|
|
|
|
|
// 2.验证登陆-临时
|
|
|
projectAccountInfo := s.accountDao.GetAccountProjectId(claimsData.Account, projectInfo.Id)
|
|
|
- // 未账号改账号
|
|
|
+ account := &models.CmProjectAccount{}
|
|
|
+ account.JlAuth = 1
|
|
|
+ // 本地没有账号
|
|
|
if projectAccountInfo.Id == 0 {
|
|
|
- // 到计量拉取普通账号 - TODO
|
|
|
- // Jlzf := lib.NewJlzf()
|
|
|
- // // 1.获得计量 账号和项目 信息
|
|
|
- // if JlResultData, err := Jlzf.GetProjectAndAccount(claimsData.Code, claimsData.Account); err != nil {
|
|
|
- // return nil, err
|
|
|
- // }
|
|
|
- // // 2-. 创建 账号 TODO
|
|
|
- // account := &models.CmProjectAccount{}
|
|
|
- // if err := s.accountDao.Add(account); err != nil {
|
|
|
- // return nil, err
|
|
|
- // }
|
|
|
+ accountGroup := int(JlResultAccount["accountGroup"].(float64))
|
|
|
+ account.ProjectId = projectInfo.Id
|
|
|
+ account.Account = JlResultAccount["account"].(string)
|
|
|
+ account.Password = "JL"
|
|
|
+ account.AccountGroup = accountGroup
|
|
|
+ account.Name = JlResultAccount["name"].(string)
|
|
|
+ account.Company = JlResultAccount["company"].(string)
|
|
|
+ account.Position = JlResultAccount["role"].(string)
|
|
|
+ account.Mobile = JlResultAccount["mobile"].(string)
|
|
|
+ account.Telephone = JlResultAccount["telephone"].(string)
|
|
|
+ account.Enable = 1
|
|
|
+ account.CreateTime = time.Now()
|
|
|
+ if err := s.accountDao.Add(account); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ // 覆盖原来的信息
|
|
|
+ projectAccountInfo = account
|
|
|
+ } else if projectAccountInfo.JlAuth == 0 {
|
|
|
+ // 更新为互通授权账号
|
|
|
+ account.Id = projectAccountInfo.Id
|
|
|
+ if err := s.accountDao.Update(account, []string{"jl_auth"}); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
}
|
|
|
// 2-1.账号停用
|
|
|
if projectAccountInfo.Enable == 0 {
|
|
@@ -177,3 +264,35 @@ func (s *JlService) AuthLogin(claimsData *viewmodels.Jl, writer http.ResponseWri
|
|
|
viewAccountData := comm.MakeProjectAccountVM(projectAccountInfo)
|
|
|
return &viewAccountData, nil
|
|
|
}
|
|
|
+
|
|
|
+func (s *JlService) ProjectExist(projectId int, accountId int) (map[string]interface{}, error) {
|
|
|
+ exist := 0
|
|
|
+ projectData := s.dao.Get(projectId)
|
|
|
+ if projectData.Id == 0 {
|
|
|
+ return nil, errors.New("项目未找到")
|
|
|
+ }
|
|
|
+ if projectData.JlReciprocate != 1 {
|
|
|
+ return nil, errors.New("计量未开通 跳转")
|
|
|
+ }
|
|
|
+ accountData := s.accountDao.Get(accountId, projectId)
|
|
|
+ if accountData.Id == 0 {
|
|
|
+ return nil, errors.New("账号未找到")
|
|
|
+ }
|
|
|
+ if accountData.JlAuth != 1 {
|
|
|
+ return nil, errors.New("计量未开通 此账号 跳转")
|
|
|
+ }
|
|
|
+
|
|
|
+ // 计量 的 项目下 是否存在 账号
|
|
|
+ Jlzf := lib.NewJlzf()
|
|
|
+ // 1.获得计量 账号和项目 信息 - 表示验证通过
|
|
|
+ if _, _, err := Jlzf.GetProjectAndAccount(projectData.Code, accountData.Account); err != nil {
|
|
|
+ return nil, errors.New("计量 校验失败-未找到项目或账号")
|
|
|
+ }
|
|
|
+ exist = 1
|
|
|
+ tokenString, _ := utils.CreateJlToken(jwt.MapClaims{
|
|
|
+ "code": projectData.Code,
|
|
|
+ "account": accountData.Account,
|
|
|
+ "exp": time.Now().Add(24 * time.Hour).Unix(),
|
|
|
+ })
|
|
|
+ return map[string]interface{}{"exist": exist, "token": tokenString}, nil
|
|
|
+}
|