caipin 4 anos atrás
pai
commit
eeb8214da5

+ 41 - 1
comm/functions.go

@@ -27,7 +27,7 @@ import (
 	"go.mod/web/viewmodels"
 )
 
-// 构造视图层models
+// 账号-构造视图层models
 func MakeProjectAccountVM(modelsAccount *models.CmProjectAccount) viewmodels.ProjectAccount {
 	viewAccountData := viewmodels.ProjectAccount{}
 	aesId, _ := AesEncrypt(strconv.Itoa(modelsAccount.Id), conf.SignSecret)
@@ -44,6 +44,46 @@ func MakeProjectAccountVM(modelsAccount *models.CmProjectAccount) viewmodels.Pro
 	return viewAccountData
 }
 
+func MakeTreeContract(Data []*viewmodels.TreeContract, node *viewmodels.TreeContract) { //参数为父节点,添加父节点的子节点指针切片
+	childs, _ := HaveChildContract(Data, node) //判断节点是否有子节点并返回
+	if childs != nil {
+		// 子节点总数
+		Total := len(childs)
+		node.ChildsTotal = Total
+		// 标记最后一个元素
+		end := Total - 1
+		childs[end].IsEnd = true
+		// 往父节点添加子节点
+		node.Children = append(node.Children, childs[0:]...) //添加子节点
+		for _, v := range childs {                           //查询子节点的子节点,并添加到子节点
+			_, has := HaveChildContract(Data, v)
+			if has {
+				// 递归添加节点
+				MakeTreeContract(Data, v)
+			}
+			// 目录下是否包含标段
+			if v.Isfolder == 0 {
+				node.IsBid = true
+			} else {
+				node.HasFolder = true
+			}
+		}
+	}
+}
+
+// 是否有子树
+func HaveChildContract(Data []*viewmodels.TreeContract, node *viewmodels.TreeContract) (child []*viewmodels.TreeContract, yes bool) {
+	for _, v := range Data {
+		if v.ParentId == node.Id {
+			child = append(child, v)
+		}
+	}
+	if child != nil {
+		yes = true
+	}
+	return
+}
+
 // 当前时间的时间戳
 func NowUnix() int {
 	return int(time.Now().In(conf.SysTimeLocation).Unix())

+ 40 - 16
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.Tree
+	GetAllContract(projectId int) *viewmodels.TreeContract
 	Rename(treevm viewmodels.Tree, projectId int) error
 	GetFolderAndBid(id int, projectId int) ([]models.CmTree, error)
 	DeleteFolderAndBid(id int, projectId int) error
@@ -119,11 +119,11 @@ func (s *treeService) GetAllProject(projectId int) *viewmodels.Tree {
 }
 
 // 获得合同管理的目录
-func (s *treeService) GetAllContract(projectId int) *viewmodels.Tree {
+func (s *treeService) GetAllContract(projectId int) *viewmodels.TreeContract {
 	datalist := s.dao.GetAllTree(projectId)
-	folderlist := make([]viewmodels.Tree, 0)
+	folderlist := make([]viewmodels.TreeContract, 0)
 	// 生成根
-	folder := viewmodels.Tree{}
+	folder := viewmodels.TreeContract{}
 	id, _ := comm.AesEncrypt(strconv.Itoa(0), conf.SignSecret)
 	parentId, _ := comm.AesEncrypt(strconv.Itoa(-1), conf.SignSecret)
 	folder.Id = id
@@ -132,42 +132,66 @@ func (s *treeService) GetAllContract(projectId int) *viewmodels.Tree {
 	folderlist = append(folderlist, folder)
 	// 加入数据
 	for _, data := range datalist {
-		folder := viewmodels.Tree{}
+		folder := viewmodels.TreeContract{}
 		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)
-		serial, _ := comm.AesEncrypt(strconv.Itoa(data.Serial), conf.SignSecret)
 		folder.Id = id
 		folder.Name = data.Name
 		folder.ParentId = parentId
 		folder.ProjectId = projectId
-		folder.Depth = data.Depth + 1
-		folder.Serial = serial
-		folder.Ancounts = data.Ancounts
 		// 合同数据
+		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
-		folder.CreateTime = data.CreateTime.Format(conf.SysTimeform)
 		folderlist = append(folderlist, folder)
 	}
 
 	//fmt.Println(folderlist)
 
-	var data []*viewmodels.Tree
-	data = make([]*viewmodels.Tree, 0)
+	var data []*viewmodels.TreeContract
+	data = make([]*viewmodels.TreeContract, 0)
 	for i, _ := range folderlist {
-		var a *viewmodels.Tree
+		var a *viewmodels.TreeContract
 		a = &folderlist[i]
 		data = append(data, a)
 	}
 
 	node := &folderlist[0] //父节点
-	maketree(data, node)   //调用生成tree
-	//transformjson(node)    //转化为json
+	comm.MakeTreeContract(data, node)
 	return node
 }
 
@@ -401,7 +425,7 @@ func (s *treeService) Move(id int, moveId int, projectId int) error {
 	return nil
 }
 
-// 创建一颗树
+// 创建一颗树...interface{}
 func maketree(Data []*viewmodels.Tree, node *viewmodels.Tree) { //参数为父节点,添加父节点的子节点指针切片
 	childs, _ := havechild(Data, node) //判断节点是否有子节点并返回
 	if childs != nil {

+ 16 - 0
web/api/contract_api.go

@@ -21,6 +21,14 @@ type ContractApi struct {
 	// ServiceProject        services.ProjectService
 }
 
+// @Summary 获得合同目录和标段
+// @Tags 合同管理
+// @Description 获得合同目录和标段
+// @Accept  json
+// @Produce  json
+// @Security ApiKeyAuth
+// @Success 200 {object} viewmodels.TreeContract "{code:0成功,-1参数类错误,data:viewmodels.ProjectAccount,msg:错误信息}"
+// @Router /api/contract [get]
 func (c *ContractApi) Get() {
 	// 获得项目ID
 	projectIdInt, err := utils.GetProjectId(c.Ctx)
@@ -41,3 +49,11 @@ func (c *ContractApi) Get() {
 		"data": FolderData,
 	})
 }
+
+func (c *ContractApi) GetIncome() {
+	// 1.未设置了项目节
+	// 返回项目节2个基础模板
+
+	// 2.已设置项目节
+	// 返回项目相关所有信息
+}

+ 4 - 4
web/viewmodels/bid_account.go

@@ -9,10 +9,10 @@ package viewmodels
 import validation "github.com/go-ozzo/ozzo-validation/v3"
 
 type BidAccount struct {
-	Id           string `form:"id"`
-	BidsectionId string `form:"bidsectionId"`
-	ProjectId    string `form:"projectId"`
-	AccountId    string `form:"accountId"`
+	Id           string `form:"id" json:"id"`
+	BidsectionId string `form:"bidsectionId" json:"bidsectionId"`
+	ProjectId    string `form:"projectId" json:"projectId"`
+	AccountId    string `form:"accountId" json:"accountId"`
 
 	FolderId string `form:"folderId"`
 }

+ 5 - 5
web/viewmodels/bidsection.go

@@ -11,11 +11,11 @@ import (
 )
 
 type Bidsection struct {
-	Id         string `form:"id"`
-	Name       string `form:"name"`
-	ProjectId  string `form:"name"`
-	CreateTime string `form:"createTime"`
-	FolderId   string `form:"folderId"`
+	Id         string `form:"id" json:"id"`
+	Name       string `form:"name" json:"name"`
+	ProjectId  string `form:"projectId" json:"projectId"`
+	CreateTime string `form:"createTime" json:"createTime"`
+	FolderId   string `form:"folderId" json:"folderId"`
 	// Status   int    `xorm:"comment('状态') TINYINT(1)"`
 	// UserId   int    `xorm:"comment('用户id') INT(11)"`
 	// Category string `xorm:"comment('分类属性') VARCHAR(1024)"`

+ 4 - 4
web/viewmodels/login.go

@@ -9,10 +9,10 @@ package viewmodels
 import validation "github.com/go-ozzo/ozzo-validation/v3"
 
 type Login struct {
-	Code     string `form:"code" validate:"required" message:"栏目不能为空"`
-	Account  string `form:"account"`
-	Password string `form:"password"`
-	Csrf     string `form:"csrf"`
+	Code     string `form:"code" json:"code"`
+	Account  string `form:"account" json:"account"`
+	Password string `form:"password" json:"password"`
+	Csrf     string `form:"csrf" json:"csrf"`
 }
 
 func (l Login) Validate() error {

+ 13 - 13
web/viewmodels/project_account.go

@@ -13,19 +13,19 @@ import (
 )
 
 type ProjectAccount struct {
-	Id           string `form:"id"`
-	ProjectId    string `form:"projectid"`
-	Account      string `form:"account"`
-	Password     string `form:"password"`
-	Name         string `form:"name"`
-	Company      string `form:"company"`
-	Position     string `form:"position"`
-	Role         string `form:"role"`
-	Mobile       string `form:"mobile"`
-	Telephone    string `form:"telephone"`
-	IsAdmin      int    `form:"isAdmin"`
-	AccountGroup int    `form:"accountGroup"`
-	Enable       int    `form:"enable"`
+	Id           string `form:"id" json:"id"`
+	ProjectId    string `form:"projectid" json:"projectid"`
+	Account      string `form:"account" json:"account"`
+	Password     string `form:"password" json:"password"`
+	Name         string `form:"name" json:"name"`
+	Company      string `form:"company" json:"company"`
+	Position     string `form:"position" json:"position"`
+	Role         string `form:"role" json:"role"`
+	Mobile       string `form:"mobile" json:"mobile"`
+	Telephone    string `form:"telephone" json:"telephone"`
+	IsAdmin      int    `form:"isAdmin" json:"isAdmin"`
+	AccountGroup int    `form:"accountGroup" json:"accountGroup"`
+	Enable       int    `form:"enable" json:"enable"`
 
 	Csrf string `form:"csrf"`
 }

+ 23 - 13
web/viewmodels/tree_contract.go

@@ -9,19 +9,20 @@ package viewmodels
 import validation "github.com/go-ozzo/ozzo-validation/v3"
 
 type TreeContract struct {
-	Id             string `form:"id" json:"id" `
-	Name           string `form:"name" json:"name"`
-	ProjectId      string `form:"projectId" json:"projectId"`
-	BidsectionId   string `form:"bidsectionId" json:"bidsectionId"`
-	ParentId       string `form:"parentId" json:"parentId"`
-	Depth          int    `form:"depth" json:"depth"`
-	Serial         string `form:"serial" json:"serial"`
-	Attribution    string `form:"attribution" json:"attribution"`
-	Isfolder       int    `form:"isfolder" json:"isfolder"`
-	CreateTime     string `form:"createTime" json:"createTime"`
-	UpdateTime     string `form:"updateTime" json:"updateTime"`
-	TargetFolderId string `form:"targetFolderId" json:"targetFolderId"`
-	Ancounts       int    `form:"ancounts" json:"ancounts"`
+	Id           string `form:"id" json:"id" `
+	Name         string `form:"name" json:"name"`
+	ProjectId    string `form:"projectId" json:"projectId"`
+	BidsectionId string `form:"bidsectionId" json:"bidsectionId"`
+	ParentId     string `form:"parentId" json:"parentId"`
+	Isfolder     int    `form:"isfolder" json:"isfolder"`
+
+	Contracts               int    `form:"contracts" json:"contracts"`
+	ContractsIncome         string `form:"contractsIncome" json:"contractsIncome"`
+	ContractsReturned       string `form:"contractsReturned" json:"contractsReturned"`
+	ContractsIncomeProgress string `form:"contractsIncomeProgress" json:"contractsIncomeProgress"`
+	ContractsPay            string `form:"contractsPay" json:"contractsPay"`
+	ContractsPaid           string `form:"contractsPaid" json:"contractsPaid"`
+	ContractsPayProgress    string `form:"contractsPayProgress" json:"contractsPayProgress"`
 
 	Csrf string `form:"csrf" json:"csrf"`
 	// Leaf        bool    `json:"leaf" `
@@ -38,3 +39,12 @@ func (l TreeContract) Validate() error {
 		validation.Field(&l.Name, validation.Required.Error("文件夹名称不能为空"), validation.Length(1, 60).Error("最多 15 个字符")),
 	)
 }
+
+// Depth          int    `form:"depth" json:"depth"`
+// Serial         string `form:"serial" json:"serial"`
+// Attribution    string `form:"attribution" json:"attribution"`
+
+// CreateTime     string `form:"createTime" json:"createTime"`
+// UpdateTime     string `form:"updateTime" json:"updateTime"`
+// TargetFolderId string `form:"targetFolderId" json:"targetFolderId"`
+// Ancounts       int    `form:"ancounts" json:"ancounts"`