caipin преди 4 години
родител
ревизия
b3d60cf5a4

+ 4 - 3
comm/functions.go

@@ -45,9 +45,10 @@ func MakeProjectAccountVM(modelsAccount *models.CmProjectAccount) viewmodels.Pro
 	viewAccountData.AccountGroup = modelsAccount.AccountGroup
 	viewAccountData.Enable = modelsAccount.Enable
 	viewAccountData.Position = modelsAccount.Position
-	viewAccountData.ContractPermission = modelsAccount.ContractPermission
-	viewAccountData.QualityPermission = modelsAccount.QualityPermission
-	viewAccountData.SafePermission = modelsAccount.SafePermission
+
+	// viewAccountData.ContractPermission = modelsAccount.ContractPermission
+	// viewAccountData.QualityPermission = modelsAccount.QualityPermission
+	// viewAccountData.SafePermission = modelsAccount.SafePermission
 
 	return viewAccountData
 }

+ 38 - 0
dao/bid_account_dao.go

@@ -78,6 +78,34 @@ func (d *BidAccountDao) Create(bidsectionId int, accountData *models.CmProjectAc
 		return errors.New("更新标段成员量出错")
 	}
 
+	// 2.初始化账号权限
+	permissionAccount := &models.CmPermissionAccount{}
+	_, err = d.engine.
+		Where("project_id=? and bidsection_id = ? and account_id= ? ", projectId, bidsectionId, accountData.Id).
+		Get(permissionAccount)
+	// 2-1
+	permiss := "{\"access\":0,\"add\":0,\"delete\":0}"
+	if permissionAccount.Id == 0 {
+		permissionAccount.ProjectId = projectId
+		permissionAccount.BidsectionId = bidsectionId
+		permissionAccount.AccountId = accountData.Id
+		permissionAccount.ContractPermission = permiss
+		permissionAccount.QualityPermission = permiss
+		permissionAccount.SafePermission = permiss
+		_, err = session.Insert(permissionAccount)
+		if err != nil {
+			session.Rollback()
+			return errors.New("初始化账号权限出错")
+		}
+	} else {
+		_, err = session.Exec("UPDATE cm_permission_account SET `contract_permission` = ? ,`quality_permission` = ? ,`safe_permission` = ?  where id = ?",
+			permiss, permiss, permiss, permissionAccount.Id)
+		if err != nil {
+			session.Rollback()
+			return errors.New("更新账号下标段出错")
+		}
+	}
+
 	// -更新账号表的标段ID
 	// 1.获得账号中已绑定的标段
 	bidsectionIdsString := accountData.BidsectionIds
@@ -153,6 +181,13 @@ func (d *BidAccountDao) Delete(bidsectionId int, accountData *models.CmProjectAc
 		session.Rollback()
 		return errors.New("移除标段成员出错")
 	}
+	// 1-1 移除账号权限
+	_, err = session.Exec("DELETE FROM `cm_permission_account` WHERE project_id= ? and  bidsection_id = ? and  account_id = ? limit 1",
+		projectId, bidsectionId, accountData.Id)
+	if err != nil {
+		session.Rollback()
+		return errors.New("移除成员权限出错")
+	}
 
 	// -更新树成员量
 	// 2.获得标段成员量
@@ -175,6 +210,7 @@ func (d *BidAccountDao) Delete(bidsectionId int, accountData *models.CmProjectAc
 	// 2.获得已有的标段ID
 	err = json.Unmarshal([]byte(bidsectionIdsString), &bidsectionIds)
 	if err != nil {
+		session.Rollback()
 		return err
 	}
 	// 获得需要删除标段ID的下标
@@ -186,6 +222,7 @@ func (d *BidAccountDao) Delete(bidsectionId int, accountData *models.CmProjectAc
 		}
 	}
 	if bidsectionIdsIndex == -1 {
+		session.Rollback()
 		return errors.New("移除标段成员出错")
 	}
 	// 删除标段ID
@@ -194,6 +231,7 @@ func (d *BidAccountDao) Delete(bidsectionId int, accountData *models.CmProjectAc
 	// 转换JSON字符byte
 	bidsectionIdsByte, err = json.Marshal(bidsectionIds)
 	if err != nil {
+		session.Rollback()
 		return err
 	}
 	bidsectionIdsString = string(bidsectionIdsByte[:])

+ 46 - 0
dao/permission_account_dao.go

@@ -0,0 +1,46 @@
+/*
+ * @description: 账号权限
+ * @Author: CP
+ * @Date: 2021-01-26 15:09:10
+ * @FilePath: \construction_management\dao\permission_account_dao.go
+ */
+
+package dao
+
+import (
+	"errors"
+
+	"github.com/go-xorm/xorm"
+	"go.mod/models"
+)
+
+//数据库操作引擎
+type PermissionAccountDao struct {
+	engine *xorm.Engine
+}
+
+//获得一个DAO对象
+func NewPermissionAccountDao(engine *xorm.Engine) *PermissionAccountDao {
+	return &PermissionAccountDao{
+		engine: engine,
+	}
+}
+
+// 获得标段下账号权限
+func (d *PermissionAccountDao) GetBidsectionId(bidsectionId int) []models.CmPermissionAccount {
+	datalist := make([]models.CmPermissionAccount, 0)
+	_ = d.engine.
+		Where(" bidsection_id=?  ", bidsectionId).
+		Find(&datalist)
+	return datalist
+}
+
+//更新
+func (d *PermissionAccountDao) Update(data *models.CmPermissionAccount, columns []string) error {
+	//_, err := d.engine.Id(data.Id).MustCols(columns...).Update(data)
+	_, err := d.engine.Where("project_id = ? and bidsection_id = ? and account_id= ? ", data.ProjectId, data.BidsectionId, data.AccountId).MustCols(columns...).Update(data)
+	if err != nil {
+		return errors.New("更新权限-账号失败")
+	}
+	return nil
+}

+ 11 - 0
models/cm_permission_account.go

@@ -0,0 +1,11 @@
+package models
+
+type CmPermissionAccount struct {
+	Id                 int    `xorm:"not null pk autoincr comment('自增ID') INT(11)"`
+	ProjectId          int    `xorm:"not null default 0 comment('项目ID') INT(11)"`
+	BidsectionId       int    `xorm:"comment('标段ID') INT(11)"`
+	AccountId          int    `xorm:"not null default 0 comment('账号ID') INT(11)"`
+	ContractPermission string `xorm:"comment('合同权限(json)') TEXT"`
+	QualityPermission  string `xorm:"comment('质量巡检权限(json)') TEXT"`
+	SafePermission     string `xorm:"comment('安全巡检权限(json)') TEXT"`
+}

+ 34 - 20
services/project_account_service.go

@@ -46,26 +46,28 @@ type ProjectAccountService interface {
 
 	ChangePassword(AccountData viewmodels.AccountPassword, projectId int, projectAccountId int) error
 
-	SaveAuth(permission viewmodels.Permission, projectId int, accountId int) error
+	SaveAuth(permission viewmodels.Permission, projectId int, bidsectionId int, accountId int) error
 }
 
 //返回service操作类
 type projectAccountService struct {
-	dao           *dao.ProjectAccountDao
-	bidAccountDao *dao.BidAccountDao
-	validSave     string
-	validAdd      string
-	validPassword string
+	dao                  *dao.ProjectAccountDao
+	bidAccountDao        *dao.BidAccountDao
+	permissionAccountDao *dao.PermissionAccountDao
+	validSave            string
+	validAdd             string
+	validPassword        string
 }
 
 //创建项目用户service
 func NewProjectAccountService() ProjectAccountService {
 	return &projectAccountService{
-		dao:           dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
-		bidAccountDao: dao.NewBidAccountDao(datasource.InstanceDbMaster()),
-		validSave:     "/api/projectSetting/account/save",
-		validAdd:      "/api/projectSetting/account/create",
-		validPassword: "/api/projectSetting/account/change",
+		dao:                  dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
+		bidAccountDao:        dao.NewBidAccountDao(datasource.InstanceDbMaster()),
+		permissionAccountDao: dao.NewPermissionAccountDao(datasource.InstanceDbMaster()),
+		validSave:            "/api/projectSetting/account/save",
+		validAdd:             "/api/projectSetting/account/create",
+		validPassword:        "/api/projectSetting/account/change",
 	}
 }
 
@@ -215,10 +217,21 @@ func (s *projectAccountService) GetBidAccount(bidsectionId int, projectId int, p
 	// 获得账号信息
 	accountData := s.dao.GetInId(inId)
 
+	// 2.获得账号权限
+	permissionData := s.permissionAccountDao.GetBidsectionId(bidsectionId)
+
 	// 格式化账号数据
 	accountListVM := make([]viewmodels.ProjectAccount, 0)
 	for _, data := range accountData {
 		account := comm.MakeProjectAccountVM(&data)
+		for _, item := range permissionData {
+			if data.Id == item.AccountId {
+				account.ContractPermission = item.ContractPermission
+				account.QualityPermission = item.QualityPermission
+				account.SafePermission = item.SafePermission
+				break
+			}
+		}
 		accountListVM = append(accountListVM, account)
 	}
 	return accountListVM
@@ -368,7 +381,7 @@ func (s *projectAccountService) GetProjectInfo(id int) (viewmodels.ProjectInfo,
 }
 
 // 保存权限设置
-func (s *projectAccountService) SaveAuth(permission viewmodels.Permission, projectId int, accountId int) error {
+func (s *projectAccountService) SaveAuth(permission viewmodels.Permission, projectId int, bidsectionId int, accountId int) error {
 	// 1.构造权限字符串
 	// 1-1.合同权限
 	contractPermission := map[string]int{
@@ -405,13 +418,14 @@ func (s *projectAccountService) SaveAuth(permission viewmodels.Permission, proje
 	qualityPermissionStr := string(qualityPermissionByte)
 
 	// 2.保存权限
-	account := models.CmProjectAccount{}
-	account.Id = accountId
-	account.ProjectId = projectId
-	account.ContractPermission = contractPermissionStr
-	account.SafePermission = safePermissionStr
-	account.QualityPermission = qualityPermissionStr
-
-	err = s.dao.Update(&account, []string{"ContractPermission", "SafePermission", "QualityPermission"})
+	permissionAccount := models.CmPermissionAccount{}
+	permissionAccount.ProjectId = projectId
+	permissionAccount.BidsectionId = bidsectionId
+	permissionAccount.AccountId = accountId
+	permissionAccount.ContractPermission = contractPermissionStr
+	permissionAccount.SafePermission = safePermissionStr
+	permissionAccount.QualityPermission = qualityPermissionStr
+
+	err = s.permissionAccountDao.Update(&permissionAccount, []string{"ContractPermission", "SafePermission", "QualityPermission"})
 	return err
 }

+ 3 - 2
services/tree_service.go

@@ -29,7 +29,7 @@ type TreeService interface {
 	ValidRule(ctx iris.Context) (viewmodels.Tree, error)
 	Create(data viewmodels.Tree) error
 	GetAllProject(projectId int) *viewmodels.Tree
-	GetAllContract(projectId int) *viewmodels.FolderContract
+	GetAllContract(projectId int, projectAccountId int) *viewmodels.FolderContract
 	Rename(treevm viewmodels.Tree, projectId int) error
 	GetFolderAndBid(id int, projectId int) ([]models.CmTree, error)
 	DeleteFolderAndBid(id int, projectId int) error
@@ -122,9 +122,10 @@ func (s *treeService) GetAllProject(projectId int) *viewmodels.Tree {
 }
 
 // 获得合同管理的目录
-func (s *treeService) GetAllContract(projectId int) *viewmodels.FolderContract {
+func (s *treeService) GetAllContract(projectId int, projectAccountId int) *viewmodels.FolderContract {
 	datalist := s.dao.GetAllTree(projectId)
 	folderlist := make([]viewmodels.FolderContract, 0)
+
 	// 生成根
 	folder := viewmodels.FolderContract{}
 	id, _ := comm.AesEncrypt(strconv.Itoa(0), conf.SignSecret)

+ 8 - 2
web/api/contract_api.go

@@ -36,14 +36,20 @@ type ContractApi struct {
 // @Router /api/contract/folder [get]
 func (c *ContractApi) GetFolder() {
 	// 获得项目ID
-	projectIdInt, err := utils.GetProjectId(c.Ctx)
+	projectId, err := utils.GetProjectId(c.Ctx)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": err})
+		return
+	}
+	// 获得项目账号ID
+	projectAccountId, err := utils.GetProjectAccountId(c.Ctx)
 	if err != nil {
 		c.Ctx.JSON(iris.Map{"code": -1, "msg": err})
 		return
 	}
 
 	// 获得层级文件夹
-	FolderData := c.ServiceTree.GetAllContract(projectIdInt)
+	FolderData := c.ServiceTree.GetAllContract(projectId, projectAccountId)
 
 	c.Ctx.JSON(iris.Map{
 		"code": 0,

+ 7 - 1
web/api/project_setting_auth_api.go

@@ -149,8 +149,14 @@ func (c *ProjectSettingApi) PostBidAccountAuth() {
 		return
 	}
 
+	bidsectionId, err := utils.GetDecryptId(PermissionData.BidsectionId)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
+		return
+	}
+
 	// 保存设置的权限
-	err = c.ServiceProjectAccount.SaveAuth(PermissionData, projectId, accountId)
+	err = c.ServiceProjectAccount.SaveAuth(PermissionData, projectId, bidsectionId, accountId)
 	if err != nil {
 		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
 		return