初始
This commit is contained in:
668
third/create/a.go
Normal file
668
third/create/a.go
Normal file
@ -0,0 +1,668 @@
|
||||
package create
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"time"
|
||||
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
"github.com/sony/sonyflake"
|
||||
"github.com/tiger1103/gfast/v3/api/v1/system"
|
||||
"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/do"
|
||||
"github.com/tiger1103/gfast/v3/internal/app/system/model/entity"
|
||||
"github.com/tiger1103/gfast/v3/internal/consts"
|
||||
)
|
||||
|
||||
// 创建 gantt json 数据
|
||||
func CreateGanttJson(ctx context.Context, fangzhenName string, parentName string, data []entity.ProjectSchedule) (string, error) {
|
||||
// 层级: 方阵名 --> 施工项目名 --> 子施工项目名
|
||||
ganttData := make([]system.Gantt, 0, len(data))
|
||||
|
||||
// 添加项目名
|
||||
ganttData = append(ganttData, system.Gantt{Id: 1, StartDate: "2024-01-01 00:00:00", Duration: 15, Text: "方阵1", Parent: 0, Progress: 0, Open: true})
|
||||
ganttData = append(ganttData, system.Gantt{Id: 2, StartDate: "2024-01-01 00:00:00", EndDate: "2024-01-15 00:00:00", Duration: 15, Text: "防雷接地网", Parent: 1, Progress: 0, Open: true})
|
||||
|
||||
i := 3
|
||||
|
||||
for _, project := range data {
|
||||
ganttData = append(ganttData, system.Gantt{
|
||||
Id: int64(i),
|
||||
StartDate: project.StartDate + " 00:00:00",
|
||||
EndDate: project.EndDate + " 00:00:00",
|
||||
Duration: rand.Intn(10) + 1,
|
||||
Text: project.Name,
|
||||
// Progress: float64(project.CurrentProgress),
|
||||
Parent: 2,
|
||||
Open: true,
|
||||
})
|
||||
|
||||
aa := entity.ProjectSchedule{}
|
||||
if err := dao.ProjectSchedule.Ctx(ctx).Where(dao.ProjectSchedule.Columns().ParentId, project.ParentId).
|
||||
WhereNotNull(dao.ProjectSchedule.Columns().Types).Scan(&aa); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
ganttData = append(ganttData, system.Gantt{
|
||||
Id: int64(i + 1),
|
||||
StartDate: aa.StartDate + " 00:00:00",
|
||||
EndDate: aa.EndDate + " 00:00:00",
|
||||
Duration: 1,
|
||||
Text: "计划中",
|
||||
Parent: int64(i),
|
||||
})
|
||||
|
||||
i += 2
|
||||
}
|
||||
|
||||
// 打印 gantt json 数据
|
||||
dd, _ := json.Marshal(ganttData)
|
||||
println(string(dd))
|
||||
|
||||
return string(dd), nil
|
||||
}
|
||||
|
||||
func CreateGanttJson2(ctx context.Context, fangzhenName string, parentName string, data []entity.ProjectSchedule) ([]system.Gantt, error) {
|
||||
// 层级: 方阵名 --> 施工项目名 --> 子施工项目名
|
||||
ganttData := make([]system.Gantt, 0, len(data))
|
||||
|
||||
// 添加项目名
|
||||
ganttData = append(ganttData, system.Gantt{Id: 1, StartDate: "2024-01-01 00:00:00", Duration: 15, Text: fangzhenName, Parent: 0, Progress: 0, Open: true})
|
||||
ganttData = append(ganttData, system.Gantt{Id: 2, StartDate: "2024-01-01 00:00:00", EndDate: "2024-01-15 00:00:00", Duration: 15, Text: parentName, Parent: 1, Progress: 0, Open: true})
|
||||
|
||||
i := 3
|
||||
|
||||
index := 0
|
||||
|
||||
for i < len(data) {
|
||||
ganttData = append(ganttData, system.Gantt{
|
||||
Id: int64(i),
|
||||
StartDate: data[index].StartDate + " 00:00:00",
|
||||
EndDate: data[index].EndDate + " 00:00:00",
|
||||
Duration: rand.Intn(10) + 1,
|
||||
Text: data[index].Name,
|
||||
Parent: 2,
|
||||
Open: true,
|
||||
})
|
||||
|
||||
ganttData = append(ganttData, system.Gantt{
|
||||
Id: int64(i + 1),
|
||||
StartDate: data[index+1].StartDate + " 00:00:00",
|
||||
EndDate: data[index+1].EndDate + " 00:00:00",
|
||||
Duration: 1,
|
||||
Text: "计划中",
|
||||
Parent: int64(i),
|
||||
})
|
||||
|
||||
index += 2
|
||||
i += 2
|
||||
|
||||
if index >= len(data) {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return ganttData, nil
|
||||
}
|
||||
|
||||
type projects struct {
|
||||
Name string
|
||||
StartTime string
|
||||
EndTime string
|
||||
Sub []subJ
|
||||
}
|
||||
type subJ struct {
|
||||
Name string
|
||||
ID int
|
||||
ParentID int
|
||||
StartTime string
|
||||
EndTime string
|
||||
}
|
||||
|
||||
func FetchGanttData(ctx context.Context, matrixID int) ([]system.Gantt, error) {
|
||||
projectData := []entity.ConstructionProject{}
|
||||
// 获取指定方阵下的所有父项目
|
||||
if err := dao.ConstructionProject.Ctx(ctx).
|
||||
Where(dao.ConstructionProject.Columns().FangzhenId, matrixID).Scan(&projectData); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 父子项目列表
|
||||
projectList := []projects{}
|
||||
|
||||
// 构造所有的父项目及子项目
|
||||
for _, project := range projectData {
|
||||
detailData := []entity.ConstructionDetails{}
|
||||
if err := dao.ConstructionDetails.Ctx(ctx).
|
||||
Where(dao.ConstructionDetails.Columns().ConstructionId, project.ConstructionId).Scan(&detailData); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 如果 start_time 和 end_time 为空则使用当前时间
|
||||
var startTime string
|
||||
var endTime string
|
||||
|
||||
if project.StartTime == nil {
|
||||
startTime = time.Now().Format("2006-01-02 15:04:05")
|
||||
} else {
|
||||
startTime = project.StartTime.Format("2006-01-02 15:04:05")
|
||||
}
|
||||
|
||||
if project.EndTime == nil {
|
||||
endTime = time.Now().Format("2006-01-02 15:04:05")
|
||||
} else {
|
||||
endTime = project.EndTime.Format("2006-01-02 15:04:05")
|
||||
}
|
||||
|
||||
// 父
|
||||
projectItem := projects{
|
||||
Name: project.ConstructionName,
|
||||
StartTime: startTime,
|
||||
EndTime: endTime,
|
||||
Sub: make([]subJ, 0, len(detailData)),
|
||||
}
|
||||
|
||||
// 子
|
||||
for _, detail := range detailData {
|
||||
// 如果 start_time 和 end_time 为空则使用当前时间
|
||||
var startTime string
|
||||
var endTime string
|
||||
|
||||
if detail.StartTime == nil {
|
||||
startTime = time.Now().Format("2006-01-02 15:04:05")
|
||||
} else {
|
||||
startTime = detail.StartTime.Format("2006-01-02 15:04:05")
|
||||
}
|
||||
|
||||
if detail.EndTime == nil {
|
||||
endTime = time.Now().Format("2006-01-02 15:04:05")
|
||||
} else {
|
||||
endTime = detail.EndTime.Format("2006-01-02 15:04:05")
|
||||
}
|
||||
|
||||
projectItem.Sub = append(projectItem.Sub, subJ{
|
||||
Name: detail.Name,
|
||||
ID: int(detail.Id),
|
||||
ParentID: int(detail.Id),
|
||||
StartTime: startTime,
|
||||
EndTime: endTime,
|
||||
})
|
||||
}
|
||||
|
||||
projectList = append(projectList, projectItem)
|
||||
}
|
||||
|
||||
// 1 获取所有的排期数据
|
||||
schedulerList := []entity.ProjectSchedule{}
|
||||
if err := dao.ProjectSchedule.Ctx(ctx).WhereNot(dao.ProjectSchedule.Columns().Types, 0).
|
||||
Scan(&schedulerList); err != nil {
|
||||
}
|
||||
|
||||
// 子项目存在多个排期的情况下,需要将排期数据进行分组
|
||||
scheduleMap := make(map[int][]entity.ProjectSchedule, 0)
|
||||
for _, schedule := range schedulerList {
|
||||
if _, ok := scheduleMap[schedule.ParentId]; !ok {
|
||||
scheduleMap[schedule.ParentId] = make([]entity.ProjectSchedule, 0, 1)
|
||||
}
|
||||
scheduleMap[schedule.ParentId] = append(scheduleMap[schedule.ParentId], schedule)
|
||||
}
|
||||
|
||||
// 1.1 传入 parentid 返回一个子项目的排期数据
|
||||
findSub := func(parentID int) ([]entity.ProjectSchedule, bool) {
|
||||
if schedule, ok := scheduleMap[parentID]; ok {
|
||||
return schedule, true
|
||||
}
|
||||
return nil, false
|
||||
}
|
||||
|
||||
// 主任务
|
||||
ganttList := make([]system.Gantt, 0, len(projectList))
|
||||
|
||||
taskIndex := 1
|
||||
// 查询任务是否存在排期如果存在则不添加
|
||||
for _, project := range projectList {
|
||||
// 父级数据
|
||||
ganttList = append(ganttList, system.Gantt{
|
||||
Id: int64(taskIndex),
|
||||
StartDate: project.StartTime,
|
||||
Duration: 15,
|
||||
Text: project.Name,
|
||||
Parent: 0,
|
||||
Open: true,
|
||||
})
|
||||
|
||||
taskIndex++
|
||||
|
||||
// 记录当前主项目的下标
|
||||
parentIndex := taskIndex
|
||||
for _, sub := range project.Sub {
|
||||
scheduleData, ok := findSub(sub.ParentID)
|
||||
// 如果有排期的情况下,填充真实数据
|
||||
if ok {
|
||||
// 添加子任务
|
||||
ganttList = append(ganttList, system.Gantt{
|
||||
Id: int64(taskIndex),
|
||||
StartDate: sub.StartTime,
|
||||
EndDate: sub.EndTime,
|
||||
Duration: rand.Intn(10) + 1,
|
||||
Text: sub.Name,
|
||||
Parent: int64(parentIndex) - 1,
|
||||
ConstructionId: sub.ID,
|
||||
})
|
||||
|
||||
// 记录当前子项目的下标
|
||||
subIndex := taskIndex
|
||||
taskIndex++
|
||||
|
||||
for _, schedule := range scheduleData {
|
||||
// 添加子任务排期计划
|
||||
ganttList = append(ganttList, system.Gantt{
|
||||
Id: int64(taskIndex),
|
||||
StartDate: schedule.StartDate + " 00:00:00",
|
||||
EndDate: schedule.EndDate + " 00:00:00",
|
||||
Duration: gconv.Int(schedule.PlaneNum),
|
||||
Text: "计划中",
|
||||
Parent: int64(subIndex),
|
||||
ConstructionId: sub.ID,
|
||||
Open: true,
|
||||
})
|
||||
taskIndex++
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
// 添加子任务,如果没有排期的情况下,填充假数据,维护队列
|
||||
ganttList = append(ganttList, system.Gantt{
|
||||
Id: int64(taskIndex),
|
||||
StartDate: "2029-01-01 00:00:00",
|
||||
Duration: 15,
|
||||
Text: sub.Name,
|
||||
Parent: int64(parentIndex) - 1,
|
||||
ConstructionId: sub.ID,
|
||||
Open: true,
|
||||
})
|
||||
taskIndex++
|
||||
}
|
||||
}
|
||||
return ganttList, nil
|
||||
}
|
||||
|
||||
func FetchElementData(ctx context.Context, fangzhenId int) ([]*model.WorkStatusProgressRes, error) {
|
||||
// 获取所有的父项目
|
||||
projectData := []entity.WorkStatus{}
|
||||
if err := dao.WorkStatus.Ctx(ctx).Where(dao.WorkStatus.Columns().FangzhenId, fangzhenId).WhereNull(dao.WorkStatus.Columns().Parent).
|
||||
Scan(&projectData); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 获取所有的子项目
|
||||
detailData := []entity.WorkStatus{}
|
||||
if err := dao.WorkStatus.Ctx(ctx).Where(dao.WorkStatus.Columns().FangzhenId, fangzhenId).WhereNotNull(dao.WorkStatus.Columns().Parent).Scan(&detailData); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 根据关联关系进行数据拼接
|
||||
index := 1
|
||||
projectList := []*model.WorkStatusProgressRes{}
|
||||
for _, project := range projectData {
|
||||
// 父级数据
|
||||
projectItem := model.WorkStatusProgressRes{
|
||||
ID: index,
|
||||
Startat: project.StartAt.String(),
|
||||
Endat: project.EndAt.String(),
|
||||
Name: project.WorkName,
|
||||
Total: project.Total,
|
||||
Finished: project.Finished,
|
||||
Children: make([]model.WorkStatusProgressRes, 0, len(detailData)),
|
||||
}
|
||||
|
||||
index++
|
||||
// 子
|
||||
for _, detail := range detailData {
|
||||
if detail.Parent == int(project.Id) {
|
||||
projectItem.Children = append(projectItem.Children, model.WorkStatusProgressRes{
|
||||
ID: index,
|
||||
Startat: detail.StartAt.String(),
|
||||
Endat: detail.EndAt.String(),
|
||||
Name: detail.WorkName,
|
||||
Total: detail.Total,
|
||||
Finished: detail.Finished,
|
||||
})
|
||||
index++
|
||||
}
|
||||
}
|
||||
projectList = append(projectList, &projectItem)
|
||||
}
|
||||
|
||||
return projectList, nil
|
||||
}
|
||||
|
||||
func randomDate(dateStr string) string {
|
||||
t, _ := time.Parse("2006-01-02", dateStr)
|
||||
randDays := time.Duration(rand.Intn(2)+1) * 24 * time.Hour
|
||||
newDate := t.Add(-randDays)
|
||||
return newDate.Format("2006-01-02")
|
||||
}
|
||||
|
||||
// 获取雪花算法生成的 ID
|
||||
func GetSonyFlakeID() (uint64, error) {
|
||||
// 初始化 sonyFlake 配置
|
||||
st := sonyflake.Settings{}
|
||||
sonyFlake := sonyflake.NewSonyflake(st)
|
||||
if sonyFlake == nil {
|
||||
return 0, fmt.Errorf("需要先初始化以后再执行 GetID 函数")
|
||||
}
|
||||
|
||||
// 获取全局 ID
|
||||
id, err := sonyFlake.NextID()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return id, nil
|
||||
}
|
||||
|
||||
func GetSonyFlakeIDs(mID uint16, count int) (ids []uint64, err error) {
|
||||
// 初始化 sonyFlake 配置
|
||||
st := sonyflake.Settings{}
|
||||
sonyFlake := sonyflake.NewSonyflake(st)
|
||||
if sonyFlake == nil {
|
||||
err = fmt.Errorf("需要先初始化以后再执行 GetID 函数 err: %#v \n", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取全局 ID
|
||||
ids = make([]uint64, count)
|
||||
for i := 0; i < count; i++ {
|
||||
id, err := sonyFlake.NextID()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ids[i] = id
|
||||
}
|
||||
|
||||
return ids, nil
|
||||
}
|
||||
|
||||
// FetchTemplateData 为方阵绑定父子项目
|
||||
func FetchTemplateData(ctx context.Context, protectionNetID int64) ([]do.WorkStatus, error) {
|
||||
facilityGroups := createFacilities()
|
||||
|
||||
// 雪花算法生成 ID
|
||||
ids, err := GetSonyFlakeIDs(1, 38)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
details := make([]do.WorkStatus, 0, len(facilityGroups))
|
||||
|
||||
index := 0
|
||||
for _, group := range facilityGroups {
|
||||
projectID, err := dao.WorkStatus.Ctx(ctx).Data(do.WorkStatus{
|
||||
FangzhenId: protectionNetID,
|
||||
WorkId: ids[index],
|
||||
WorkName: group.Name,
|
||||
Total: group.FacilityCount,
|
||||
Type: group.TypeNumber,
|
||||
IsPercent: group.IsPercentage,
|
||||
Status: 0,
|
||||
}).InsertAndGetId()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
index++
|
||||
|
||||
for _, component := range group.Components {
|
||||
details = append(details, do.WorkStatus{
|
||||
FangzhenId: protectionNetID,
|
||||
Parent: projectID,
|
||||
WorkId: ids[index],
|
||||
WorkName: component.Name,
|
||||
Total: component.Quantity,
|
||||
IsPercent: component.IsPercentage,
|
||||
Type: component.TypeNumber,
|
||||
Status: 0,
|
||||
})
|
||||
index++
|
||||
}
|
||||
}
|
||||
|
||||
return details, nil
|
||||
}
|
||||
|
||||
// 为方阵绑定施工项目
|
||||
func CreateConstructionProject(ctx context.Context, protectionNetID int64) error {
|
||||
facilityGroups := createFacilities()
|
||||
|
||||
details := make([]do.ConstructionDetails, len(facilityGroups))
|
||||
for _, group := range facilityGroups {
|
||||
projectID, err := dao.ConstructionProject.Ctx(ctx).Data(do.ConstructionProject{
|
||||
FangzhenId: protectionNetID,
|
||||
ConstructionName: group.Name,
|
||||
Total: group.FacilityCount,
|
||||
IsPercentage: group.IsPercentage,
|
||||
}).InsertAndGetId()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, component := range group.Components {
|
||||
details = append(details, do.ConstructionDetails{
|
||||
Name: component.Name,
|
||||
ConstructionId: projectID,
|
||||
Total: component.Quantity,
|
||||
IsPercentage: component.IsPercentage,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
_, err := dao.ConstructionDetails.Ctx(ctx).Batch(50).Insert(details)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func createFacilities() []system.FacilityGroup {
|
||||
return []system.FacilityGroup{{
|
||||
Name: "防雷接地网",
|
||||
FacilityCount: nil,
|
||||
IsPercentage: &[]int{0}[0],
|
||||
TypeNumber: consts.LightningProtectionNet,
|
||||
Components: []system.Component{
|
||||
{
|
||||
Name: "接地沟",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
Quantity: 0,
|
||||
TypeNumber: consts.GroundingDitch,
|
||||
},
|
||||
{
|
||||
Name: "接地敷设",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
Quantity: 0,
|
||||
TypeNumber: consts.GroundingLaying,
|
||||
},
|
||||
{
|
||||
Name: "检测",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
Quantity: 0,
|
||||
TypeNumber: consts.GroundingTesting,
|
||||
},
|
||||
},
|
||||
}, {
|
||||
Name: "围栏",
|
||||
FacilityCount: nil,
|
||||
IsPercentage: &[]int{0}[0],
|
||||
TypeNumber: consts.Fence,
|
||||
Components: []system.Component{
|
||||
{
|
||||
Name: "基础",
|
||||
IsPercentage: &[]int{0}[0],
|
||||
Quantity: 100,
|
||||
TypeNumber: consts.FenceFoundation,
|
||||
},
|
||||
{
|
||||
Name: "安装",
|
||||
IsPercentage: &[]int{0}[0],
|
||||
Quantity: 100,
|
||||
TypeNumber: consts.FenceInstallation,
|
||||
},
|
||||
},
|
||||
}, {
|
||||
Name: "道路",
|
||||
IsPercentage: &[]int{0}[0],
|
||||
TypeNumber: consts.Road,
|
||||
Components: []system.Component{
|
||||
{
|
||||
Name: "路基",
|
||||
IsPercentage: &[]int{0}[0],
|
||||
Quantity: 100,
|
||||
TypeNumber: consts.RoadBase,
|
||||
},
|
||||
{
|
||||
Name: "排水沟",
|
||||
IsPercentage: &[]int{0}[0],
|
||||
Quantity: 100,
|
||||
TypeNumber: consts.RoadDrainageDitch,
|
||||
},
|
||||
},
|
||||
}, {
|
||||
Name: "低压部分",
|
||||
IsPercentage: &[]int{0}[0],
|
||||
FacilityCount: &[]int{0}[0],
|
||||
TypeNumber: consts.LowVoltage,
|
||||
Components: []system.Component{
|
||||
{
|
||||
Name: "钻孔",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
Quantity: 0,
|
||||
TypeNumber: consts.LowVoltageDrilling,
|
||||
},
|
||||
{
|
||||
Name: "桩基",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
Quantity: 0,
|
||||
TypeNumber: consts.LowVoltagePileFoundation,
|
||||
},
|
||||
{
|
||||
Name: "支架",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
Quantity: 0,
|
||||
TypeNumber: consts.LowVoltageBracket,
|
||||
},
|
||||
{
|
||||
Name: "光伏板",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
Quantity: 0,
|
||||
TypeNumber: consts.LowVoltagePhotovoltaicPanel,
|
||||
},
|
||||
{
|
||||
Name: "直流电缆",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
Quantity: 0,
|
||||
TypeNumber: consts.LowVoltageDC,
|
||||
},
|
||||
{
|
||||
Name: "接地线",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
Quantity: 0,
|
||||
TypeNumber: consts.LowVoltageGroundWire,
|
||||
},
|
||||
{
|
||||
Name: "逆变器安装",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
TypeNumber: consts.LowVoltageInverterInstallation,
|
||||
},
|
||||
{
|
||||
Name: "电缆沟开挖",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
Quantity: 0,
|
||||
TypeNumber: consts.LowVoltageCableTrenchExcavation,
|
||||
},
|
||||
{
|
||||
Name: "低压电缆敷设",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
Quantity: 0,
|
||||
TypeNumber: consts.LowVoltageLaying,
|
||||
},
|
||||
{
|
||||
Name: "调试",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
Quantity: 0,
|
||||
TypeNumber: consts.LowVoltageDebugging,
|
||||
},
|
||||
},
|
||||
}, {
|
||||
Name: "高压部分",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
TypeNumber: consts.HighVoltage,
|
||||
Components: []system.Component{
|
||||
{
|
||||
Name: "箱变基础",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
TypeNumber: consts.HighVoltageBoxChangeFoundation,
|
||||
},
|
||||
{
|
||||
Name: "箱变安装",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
TypeNumber: consts.HighVoltageBoxChangeInstallation,
|
||||
},
|
||||
{
|
||||
Name: "电缆沟开挖",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
TypeNumber: consts.HighVoltageCableLineExcavation,
|
||||
},
|
||||
{
|
||||
Name: "高压电缆敷设",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
TypeNumber: consts.HighVoltageCableLaying,
|
||||
},
|
||||
{
|
||||
Name: "高压电缆试验",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
TypeNumber: consts.HighVoltageCableTest,
|
||||
},
|
||||
{
|
||||
Name: "高压电缆调试试验",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
TypeNumber: consts.HighVoltageCableDebuggingTest,
|
||||
},
|
||||
},
|
||||
}, {
|
||||
Name: "环网柜",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
TypeNumber: consts.RingMainCabinet,
|
||||
Components: []system.Component{
|
||||
{
|
||||
Name: "基础",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
TypeNumber: consts.RingMainCabinetFoundation,
|
||||
},
|
||||
{
|
||||
Name: "安装",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
TypeNumber: consts.RingMainCabinetInstallation,
|
||||
},
|
||||
{
|
||||
Name: "敷设",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
TypeNumber: consts.RingMainCabinetLaying,
|
||||
},
|
||||
{
|
||||
Name: "试验",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
TypeNumber: consts.RingMainCabinetTest,
|
||||
},
|
||||
{
|
||||
Name: "调试试验",
|
||||
IsPercentage: &[]int{1}[0],
|
||||
TypeNumber: consts.RingMainCabinetDebuggingTest,
|
||||
},
|
||||
},
|
||||
}}
|
||||
}
|
Reference in New Issue
Block a user