初始
This commit is contained in:
149
third/progress/parent.go
Normal file
149
third/progress/parent.go
Normal file
@ -0,0 +1,149 @@
|
||||
package progress
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"github.com/tiger1103/gfast/v3/internal/app/system/dao"
|
||||
"github.com/tiger1103/gfast/v3/internal/app/system/model"
|
||||
"github.com/tiger1103/gfast/v3/internal/app/system/model/entity"
|
||||
)
|
||||
|
||||
type Scheduler struct {
|
||||
// 总进度
|
||||
FinishedPtr int
|
||||
// 总量
|
||||
Total int
|
||||
// 实体
|
||||
WorkStatus *entity.WorkSchedule
|
||||
}
|
||||
|
||||
type Schdule map[string]Scheduler
|
||||
|
||||
// 获取指定 WorkID 的计划和总量
|
||||
func (s Schdule) Get(workID string) (int, int) {
|
||||
if scheduler, ok := s[workID]; ok {
|
||||
return scheduler.FinishedPtr, scheduler.Total
|
||||
}
|
||||
return 0, 0
|
||||
}
|
||||
|
||||
// WorkStatusGetProgress 传入一个方阵ID 获取其所有父级的进度
|
||||
func WorkStatusGetProgress(fangzhenID string) ([]*model.WorkStatusProgressRes, error) {
|
||||
var parentList []*model.WorkStatusProgressRes
|
||||
err := dao.WorkStatus.Ctx(context.Background()).As("parent").
|
||||
Fields("parent.id, parent.work_name as name ,parent.work_id,IFNULL(SUM(child.total), 0) AS total, IFNULL(SUM(child.finished), 0) AS finished").
|
||||
LeftJoin("work_status AS child", "parent.id = child.parent").
|
||||
Where("parent.parent IS NULL").
|
||||
Where("parent.fangzhen_id", fangzhenID).
|
||||
Group("parent.id, parent.work_name, parent.total").
|
||||
Scan(&parentList)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(parentList) == 0 {
|
||||
return parentList, fmt.Errorf("未找到父级计划")
|
||||
}
|
||||
|
||||
return parentList, err
|
||||
}
|
||||
|
||||
// GetProgressBySubID 获取一共子项目下所有的父级进度
|
||||
func GetProgressBySubID(subProjectID string) ([]*model.WorkStatusProgressRes, error) {
|
||||
var fangzhenList []entity.QianqiFangzhen
|
||||
if err := dao.QianqiFangzhen.Ctx(context.Background()).
|
||||
Where(dao.QianqiFangzhen.Columns().ProjectId, subProjectID).Scan(&fangzhenList); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(fangzhenList) == 0 {
|
||||
return nil, fmt.Errorf("未找到方阵")
|
||||
}
|
||||
|
||||
cumulativeProjects := []*model.WorkStatusProgressRes{}
|
||||
firstTime := true
|
||||
|
||||
// 遍历项目列表
|
||||
for index := 0; index < len(fangzhenList); index++ {
|
||||
// 获取当前项目
|
||||
project := fangzhenList[index]
|
||||
|
||||
// 获取当前项目的子项目
|
||||
childProjects, err := WorkStatusGetProgress(strconv.Itoa(project.Id))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 如果是第一次迭代,将子项目列表赋值给累积项目列表
|
||||
if firstTime {
|
||||
cumulativeProjects = childProjects
|
||||
// 更新标志变量,表示已经不是第一次迭代
|
||||
firstTime = false
|
||||
continue
|
||||
}
|
||||
|
||||
// 遍历子项目列表后叠加到累积项目列表
|
||||
for childIndex := 0; childIndex < len(childProjects); childIndex++ {
|
||||
// 获取根据索引获取当前的 cumulativeProjects
|
||||
singleChild := childProjects[childIndex]
|
||||
comulativeChild := cumulativeProjects[childIndex]
|
||||
|
||||
// 将 singleChild 的 Total 和 Finished 叠加到 comulativeChild
|
||||
comulativeChild.Total += singleChild.Total
|
||||
comulativeChild.Finished += singleChild.Finished
|
||||
}
|
||||
}
|
||||
|
||||
return cumulativeProjects, nil
|
||||
}
|
||||
|
||||
// 传入主项目ID
|
||||
func GetProgressByProjectID(projectID string) ([]*model.WorkStatusProgressRes, error) {
|
||||
subProjects := []entity.SubProject{}
|
||||
if err := dao.SubProject.Ctx(context.Background()).
|
||||
Where(dao.SubProject.Columns().ProjectId, projectID).Scan(&subProjects); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
cumulativeProjects := []*model.WorkStatusProgressRes{}
|
||||
firstTime := true
|
||||
|
||||
// 遍历项目列表
|
||||
for index := 0; index < len(subProjects); index++ {
|
||||
// 获取当前项目
|
||||
project := subProjects[index]
|
||||
|
||||
// 获取当前项目的子项目
|
||||
childProjects, err := GetProgressBySubID(strconv.Itoa(int(project.Id)))
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
// 如果是第一次迭代,将子项目列表赋值给累积项目列表
|
||||
if firstTime {
|
||||
cumulativeProjects = childProjects
|
||||
// 更新标志变量,表示已经不是第一次迭代
|
||||
firstTime = false
|
||||
continue
|
||||
}
|
||||
|
||||
// 遍历子项目列表后叠加到累积项目列表
|
||||
for childIndex := 0; childIndex < len(childProjects); childIndex++ {
|
||||
// 获取根据索引获取当前的 cumulativeProjects
|
||||
singleChild := childProjects[childIndex]
|
||||
|
||||
if childIndex < 0 || childIndex >= len(cumulativeProjects) {
|
||||
continue
|
||||
}
|
||||
comulativeChild := cumulativeProjects[childIndex]
|
||||
|
||||
// 将 singleChild 的 Total 和 Finished 叠加到 comulativeChild
|
||||
comulativeChild.Total += singleChild.Total
|
||||
comulativeChild.Finished += singleChild.Finished
|
||||
}
|
||||
}
|
||||
|
||||
return cumulativeProjects, nil
|
||||
}
|
Reference in New Issue
Block a user