|  | @@ -27,9 +27,11 @@ import (
 | 
	
		
			
				|  |  |  type TreeService interface {
 | 
	
		
			
				|  |  |  	//ValidManager(code string, account string, password string) error
 | 
	
		
			
				|  |  |  	ValidRule(ctx iris.Context) (viewmodels.Tree, error)
 | 
	
		
			
				|  |  | +	ValidRuleBidsectionType(ctx iris.Context) (viewmodels.Permission, error)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	Create(data viewmodels.Tree) error
 | 
	
		
			
				|  |  |  	GetAllProject(projectId int) *viewmodels.Tree
 | 
	
		
			
				|  |  | -	GetAllContract(projectId int, projectAccountId int) *viewmodels.FolderContract
 | 
	
		
			
				|  |  | +	GetAllContract(projectId int, account *models.CmProjectAccount, bidsectionType int) *viewmodels.FolderContract
 | 
	
		
			
				|  |  |  	Rename(treevm viewmodels.Tree, projectId int) error
 | 
	
		
			
				|  |  |  	GetFolderAndBid(id int, projectId int) ([]models.CmTree, error)
 | 
	
		
			
				|  |  |  	DeleteFolderAndBid(id int, projectId int) error
 | 
	
	
		
			
				|  | @@ -38,13 +40,15 @@ type TreeService interface {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  //返回service操作类
 | 
	
		
			
				|  |  |  type treeService struct {
 | 
	
		
			
				|  |  | -	dao *dao.TreeDao
 | 
	
		
			
				|  |  | +	dao                  *dao.TreeDao
 | 
	
		
			
				|  |  | +	permissionAccountDao *dao.PermissionAccountDao
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  //创建项目service
 | 
	
		
			
				|  |  |  func NewTreeService() TreeService {
 | 
	
		
			
				|  |  |  	return &treeService{
 | 
	
		
			
				|  |  | -		dao: dao.NewTreeDao(datasource.InstanceDbMaster()),
 | 
	
		
			
				|  |  | +		dao:                  dao.NewTreeDao(datasource.InstanceDbMaster()),
 | 
	
		
			
				|  |  | +		permissionAccountDao: dao.NewPermissionAccountDao(datasource.InstanceDbMaster()),
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -66,6 +70,24 @@ func (s *treeService) ValidRule(ctx iris.Context) (viewmodels.Tree, error) {
 | 
	
		
			
				|  |  |  	return folderVaild, nil
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// 文件夹规则验证
 | 
	
		
			
				|  |  | +func (s *treeService) ValidRuleBidsectionType(ctx iris.Context) (viewmodels.Permission, error) {
 | 
	
		
			
				|  |  | +	folderVaild := viewmodels.Permission{}
 | 
	
		
			
				|  |  | +	err := ctx.ReadForm(&folderVaild)
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		log.Println("folder-ValidRule-ReadForm转换异常, error=", err)
 | 
	
		
			
				|  |  | +		return folderVaild, err
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	err = folderVaild.ValidateType()
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		log.Println("请求标段类型验证, error=", err)
 | 
	
		
			
				|  |  | +		return folderVaild, err
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return folderVaild, nil
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  // 获得项目下 相关文件夹-整个树结构
 | 
	
		
			
				|  |  |  func (s *treeService) GetAllProject(projectId int) *viewmodels.Tree {
 | 
	
		
			
				|  |  |  	datalist := s.dao.GetAllTree(projectId)
 | 
	
	
		
			
				|  | @@ -122,10 +144,13 @@ func (s *treeService) GetAllProject(projectId int) *viewmodels.Tree {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // 获得合同管理的目录
 | 
	
		
			
				|  |  | -func (s *treeService) GetAllContract(projectId int, projectAccountId int) *viewmodels.FolderContract {
 | 
	
		
			
				|  |  | +func (s *treeService) GetAllContract(projectId int, account *models.CmProjectAccount, bidsectionType int) *viewmodels.FolderContract {
 | 
	
		
			
				|  |  |  	datalist := s.dao.GetAllTree(projectId)
 | 
	
		
			
				|  |  |  	folderlist := make([]viewmodels.FolderContract, 0)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	// 2.获得该账号的权限
 | 
	
		
			
				|  |  | +	permissionData := s.permissionAccountDao.GetProjectIdAccountId(projectId, account.Id)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	// 生成根
 | 
	
		
			
				|  |  |  	folder := viewmodels.FolderContract{}
 | 
	
		
			
				|  |  |  	id, _ := comm.AesEncrypt(strconv.Itoa(0), conf.SignSecret)
 | 
	
	
		
			
				|  | @@ -137,54 +162,85 @@ func (s *treeService) GetAllContract(projectId int, projectAccountId int) *viewm
 | 
	
		
			
				|  |  |  	folderlist = append(folderlist, folder)
 | 
	
		
			
				|  |  |  	// 加入数据
 | 
	
		
			
				|  |  |  	for _, data := range datalist {
 | 
	
		
			
				|  |  | -		folder := viewmodels.FolderContract{}
 | 
	
		
			
				|  |  | -		id, _ := comm.AesEncrypt(strconv.Itoa(data.Id), conf.SignSecret)
 | 
	
		
			
				|  |  | -		parentId, _ := comm.AesEncrypt(strconv.Itoa(data.ParentId), conf.SignSecret)
 | 
	
		
			
				|  |  | -		projectId, _ := comm.AesEncrypt(strconv.Itoa(data.ProjectId), conf.SignSecret)
 | 
	
		
			
				|  |  | -		bidsectionId, _ := comm.AesEncrypt(strconv.Itoa(data.BidsectionId), conf.SignSecret)
 | 
	
		
			
				|  |  | -		folder.Id = id
 | 
	
		
			
				|  |  | -		folder.Name = data.Name
 | 
	
		
			
				|  |  | -		folder.ParentId = parentId
 | 
	
		
			
				|  |  | -		folder.ProjectId = projectId
 | 
	
		
			
				|  |  | -		folder.BidsectionId = bidsectionId
 | 
	
		
			
				|  |  | -		// 合同数据
 | 
	
		
			
				|  |  | -		folder.Contracts = data.Contracts
 | 
	
		
			
				|  |  | -		folder.ContractsIncome = data.ContractsIncome
 | 
	
		
			
				|  |  | -		folder.ContractsReturned = data.ContractsReturned
 | 
	
		
			
				|  |  | -		// 汇款进度
 | 
	
		
			
				|  |  | -		ContractsIncome, err := strconv.ParseFloat(data.ContractsIncome, 64)
 | 
	
		
			
				|  |  | -		if err != nil {
 | 
	
		
			
				|  |  | -			ContractsIncome = 0
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		ContractsReturned, err := strconv.ParseFloat(data.ContractsReturned, 64)
 | 
	
		
			
				|  |  | -		if err != nil || ContractsReturned == 0 {
 | 
	
		
			
				|  |  | -			ContractsReturned = 0
 | 
	
		
			
				|  |  | -			folder.ContractsIncomeProgress = "0%"
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			folder.ContractsIncomeProgress = fmt.Sprintf("%.0f", (ContractsReturned/ContractsIncome)*100) + "%"
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		folder.ContractsPay = data.ContractsPay
 | 
	
		
			
				|  |  | -		folder.ContractsPaid = data.ContractsPaid
 | 
	
		
			
				|  |  | -		// 支付进度
 | 
	
		
			
				|  |  | -		ContractsPay, err := strconv.ParseFloat(data.ContractsPay, 64)
 | 
	
		
			
				|  |  | -		if err != nil {
 | 
	
		
			
				|  |  | -			ContractsPay = 0
 | 
	
		
			
				|  |  | +		flag := true
 | 
	
		
			
				|  |  | +		if data.BidsectionId != 0 {
 | 
	
		
			
				|  |  | +			flag = false
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		ContractsPaid, err := strconv.ParseFloat(data.ContractsPaid, 64)
 | 
	
		
			
				|  |  | -		if err != nil || ContractsPaid == 0 {
 | 
	
		
			
				|  |  | -			ContractsPaid = 0
 | 
	
		
			
				|  |  | -			folder.ContractsPayProgress = "0%"
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			folder.ContractsPayProgress = fmt.Sprintf("%.0f", (ContractsPaid/ContractsPay)*100) + "%"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 过滤没有权限访问的标段-管理员不需要过滤
 | 
	
		
			
				|  |  | +		if data.BidsectionId != 0 && account.IsAdmin != 1 {
 | 
	
		
			
				|  |  | +			permission := map[string]int{}
 | 
	
		
			
				|  |  | +			for _, item := range permissionData {
 | 
	
		
			
				|  |  | +				if data.BidsectionId == item.BidsectionId {
 | 
	
		
			
				|  |  | +					// 区别合同,安全,质量
 | 
	
		
			
				|  |  | +					if bidsectionType == 1 {
 | 
	
		
			
				|  |  | +						json.Unmarshal([]byte(item.SafePermission), &permission)
 | 
	
		
			
				|  |  | +					} else if bidsectionType == 2 {
 | 
	
		
			
				|  |  | +						json.Unmarshal([]byte(item.QualityPermission), &permission)
 | 
	
		
			
				|  |  | +					} else if bidsectionType == 0 {
 | 
	
		
			
				|  |  | +						json.Unmarshal([]byte(item.ContractPermission), &permission)
 | 
	
		
			
				|  |  | +					} else {
 | 
	
		
			
				|  |  | +						return nil
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					if permission["access"] == 1 {
 | 
	
		
			
				|  |  | +						flag = true
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		folder.Isfolder = data.Isfolder
 | 
	
		
			
				|  |  | -		folder.IsEnd = false
 | 
	
		
			
				|  |  | +		if flag {
 | 
	
		
			
				|  |  | +			folder := viewmodels.FolderContract{}
 | 
	
		
			
				|  |  | +			id, _ := comm.AesEncrypt(strconv.Itoa(data.Id), conf.SignSecret)
 | 
	
		
			
				|  |  | +			parentId, _ := comm.AesEncrypt(strconv.Itoa(data.ParentId), conf.SignSecret)
 | 
	
		
			
				|  |  | +			projectId, _ := comm.AesEncrypt(strconv.Itoa(data.ProjectId), conf.SignSecret)
 | 
	
		
			
				|  |  | +			bidsectionId, _ := comm.AesEncrypt(strconv.Itoa(data.BidsectionId), conf.SignSecret)
 | 
	
		
			
				|  |  | +			folder.Id = id
 | 
	
		
			
				|  |  | +			folder.Name = data.Name
 | 
	
		
			
				|  |  | +			folder.ParentId = parentId
 | 
	
		
			
				|  |  | +			folder.ProjectId = projectId
 | 
	
		
			
				|  |  | +			folder.BidsectionId = bidsectionId
 | 
	
		
			
				|  |  | +			// 合同数据
 | 
	
		
			
				|  |  | +			folder.Contracts = data.Contracts
 | 
	
		
			
				|  |  | +			folder.ContractsIncome = data.ContractsIncome
 | 
	
		
			
				|  |  | +			folder.ContractsReturned = data.ContractsReturned
 | 
	
		
			
				|  |  | +			// 汇款进度
 | 
	
		
			
				|  |  | +			ContractsIncome, err := strconv.ParseFloat(data.ContractsIncome, 64)
 | 
	
		
			
				|  |  | +			if err != nil {
 | 
	
		
			
				|  |  | +				ContractsIncome = 0
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			ContractsReturned, err := strconv.ParseFloat(data.ContractsReturned, 64)
 | 
	
		
			
				|  |  | +			if err != nil || ContractsReturned == 0 {
 | 
	
		
			
				|  |  | +				ContractsReturned = 0
 | 
	
		
			
				|  |  | +				folder.ContractsIncomeProgress = "0%"
 | 
	
		
			
				|  |  | +			} else {
 | 
	
		
			
				|  |  | +				folder.ContractsIncomeProgress = fmt.Sprintf("%.0f", (ContractsReturned/ContractsIncome)*100) + "%"
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			folder.ContractsPay = data.ContractsPay
 | 
	
		
			
				|  |  | +			folder.ContractsPaid = data.ContractsPaid
 | 
	
		
			
				|  |  | +			// 支付进度
 | 
	
		
			
				|  |  | +			ContractsPay, err := strconv.ParseFloat(data.ContractsPay, 64)
 | 
	
		
			
				|  |  | +			if err != nil {
 | 
	
		
			
				|  |  | +				ContractsPay = 0
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			ContractsPaid, err := strconv.ParseFloat(data.ContractsPaid, 64)
 | 
	
		
			
				|  |  | +			if err != nil || ContractsPaid == 0 {
 | 
	
		
			
				|  |  | +				ContractsPaid = 0
 | 
	
		
			
				|  |  | +				folder.ContractsPayProgress = "0%"
 | 
	
		
			
				|  |  | +			} else {
 | 
	
		
			
				|  |  | +				folder.ContractsPayProgress = fmt.Sprintf("%.0f", (ContractsPaid/ContractsPay)*100) + "%"
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			folder.Isfolder = data.Isfolder
 | 
	
		
			
				|  |  | +			folder.IsEnd = false
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			folder.HasFolder = false
 | 
	
		
			
				|  |  | +			folder.IsBid = false
 | 
	
		
			
				|  |  | +			folderlist = append(folderlist, folder)
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		folder.HasFolder = false
 | 
	
		
			
				|  |  | -		folder.IsBid = false
 | 
	
		
			
				|  |  | -		folderlist = append(folderlist, folder)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	//fmt.Println(folderlist)
 |