225 lines
6.8 KiB
Go
225 lines
6.8 KiB
Go
|
// ==========================================================================
|
|||
|
// GFast自动生成controller操作代码。
|
|||
|
// 生成日期:2024-03-23 10:25:39
|
|||
|
// 生成路径: internal/app/system/controller/pv_ module.go
|
|||
|
// 生成人:gfast
|
|||
|
// desc:光伏组件
|
|||
|
// company:云南奇讯科技有限公司
|
|||
|
// ==========================================================================
|
|||
|
|
|||
|
package controller
|
|||
|
|
|||
|
import (
|
|||
|
"context"
|
|||
|
"path/filepath"
|
|||
|
"strings"
|
|||
|
|
|||
|
"github.com/gogf/gf/v2/frame/g"
|
|||
|
"github.com/gogf/gf/v2/net/ghttp"
|
|||
|
"github.com/tiger1103/gfast/v3/api/v1/common/coryCommon"
|
|||
|
"github.com/tiger1103/gfast/v3/api/v1/common/shp"
|
|||
|
"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/entity"
|
|||
|
"github.com/tiger1103/gfast/v3/internal/app/system/service"
|
|||
|
"github.com/tiger1103/gfast/v3/library/liberr"
|
|||
|
"github.com/xuri/excelize/v2"
|
|||
|
)
|
|||
|
|
|||
|
type pvModuleController struct {
|
|||
|
BaseController
|
|||
|
}
|
|||
|
|
|||
|
var PvModule = new(pvModuleController)
|
|||
|
|
|||
|
// List 列表
|
|||
|
func (c *pvModuleController) List(ctx context.Context, req *system.PvModuleSearchReq) (res *system.PvModuleSearchRes, err error) {
|
|||
|
res, err = service.PvModule().List(ctx, req)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// Get 获取光伏组件
|
|||
|
func (c *pvModuleController) Get(ctx context.Context, req *system.PvModuleGetReq) (res *system.PvModuleGetRes, err error) {
|
|||
|
res = new(system.PvModuleGetRes)
|
|||
|
res.PvModuleInfoRes, err = service.PvModule().GetById(ctx, req.Id)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// Add 添加光伏组件
|
|||
|
func (c *pvModuleController) Add(ctx context.Context, req *system.PvModuleAddReq) (res *system.PvModuleAddRes, err error) {
|
|||
|
err = service.PvModule().Add(ctx, req)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// Edit 修改光伏组件
|
|||
|
func (c *pvModuleController) Edit(ctx context.Context, req *system.PvModuleEditReq) (res *system.PvModuleEditRes, err error) {
|
|||
|
err = service.PvModule().Edit(ctx, req)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// Delete 删除光伏组件
|
|||
|
func (c *pvModuleController) Delete(ctx context.Context, req *system.PvModuleDeleteReq) (res *system.PvModuleDeleteRes, err error) {
|
|||
|
err = service.PvModule().Delete(ctx, req.Ids)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// Import 导入
|
|||
|
func (c *pvModuleController) Import(ctx context.Context, req *system.PvModuleImportReq) (res *system.PvModuleImportRes, err error) {
|
|||
|
err = service.PvModule().Import(ctx, req)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 导入逆变器
|
|||
|
func (c *pvModuleController) ImportInverter(ctx context.Context, req *system.PvModuleImportInverterReq) (res *system.PvModuleImportRes, err error) {
|
|||
|
err = service.PvModule().ImportInverter(ctx, req)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 导入光伏板
|
|||
|
func (c *pvModuleController) ImportPvBoard(ctx context.Context, req *system.PvModuleImportPvBoardReq) (res *system.PvModuleImportRes, err error) {
|
|||
|
err = service.PvModule().ImportPvBoard(ctx, req)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func (c *pvModuleController) AddWorkSchedule(ctx context.Context, req *system.PvModuleAddDailyReq) (res *system.PvModuleAddDailyRes, err error) {
|
|||
|
err = service.PvModule().AddWorkSchedule(ctx, req)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 获取日报
|
|||
|
func (c *pvModuleController) GetWorkSchedule(ctx context.Context, req *system.PvModuleGetDailyReq) (res *system.PvModuleGetDailyRes, err error) {
|
|||
|
return service.PvModule().GetDaily(ctx, req)
|
|||
|
}
|
|||
|
|
|||
|
// 删除日报
|
|||
|
func (c *pvModuleController) DeleteWorkSchedule(ctx context.Context, req *system.PvModuleDeleteDailyReq) (res *system.PvModuleDeleteDailyRes, err error) {
|
|||
|
err = service.PvModule().DeleteDaily(ctx, req)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
type Zhuangdian struct {
|
|||
|
Position shp.Point `json:"position"`
|
|||
|
}
|
|||
|
|
|||
|
func ProcessFiles(ctx context.Context, files []*ghttp.UploadFile) (*shp.ShpObj, error) {
|
|||
|
var filePaths string
|
|||
|
|
|||
|
// 遍历请求中的所有文件
|
|||
|
for _, file := range files {
|
|||
|
// 保存文件后返回其路径
|
|||
|
uploadedFilePath, err := coryCommon.UploadFile(ctx, file, coryCommon.LargeFileShp)
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
|
|||
|
// 将文件路径按"."分割成切片
|
|||
|
filePathParts := strings.Split(uploadedFilePath, ".")
|
|||
|
// 如果切片长度大于1,将最后一个元素(文件扩展名)改为"shp"
|
|||
|
if len(filePathParts) > 1 {
|
|||
|
filePathParts[len(filePathParts)-1] = "shp"
|
|||
|
}
|
|||
|
// 将修改后的切片重新组合成文件路径,并将其添加到文件路径中
|
|||
|
updatedFilePath := strings.Join(filePathParts, ".")
|
|||
|
filePaths = updatedFilePath
|
|||
|
}
|
|||
|
|
|||
|
err, shp := shp.ReadShp(filePaths)
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
|
|||
|
return shp, nil
|
|||
|
}
|
|||
|
|
|||
|
// 上传 excel 为指定项目添加数据
|
|||
|
func (c *pvModuleController) AddExcel(ctx context.Context, req *system.PvModuleAddExcelReq) (res *system.PvModuleAddExcelRes, err error) {
|
|||
|
filePath, err := coryCommon.UploadFile(ctx, req.File, coryCommon.Temporary+"/")
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
|
|||
|
filePath = coryCommon.ResourcePublicToFunc(filepath.ToSlash(filePath), 2)
|
|||
|
f, err := excelize.OpenFile(filePath)
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
|
|||
|
defer func(f *excelize.File) {
|
|||
|
f.Close()
|
|||
|
}(f)
|
|||
|
|
|||
|
type group struct {
|
|||
|
Name string
|
|||
|
MatrixNumber string
|
|||
|
NominalTiltAngle string
|
|||
|
}
|
|||
|
|
|||
|
rows, err := f.GetRows("方阵统计分析")
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
|
|||
|
groups := map[string][]group{}
|
|||
|
|
|||
|
for _, row := range rows[1:] {
|
|||
|
// 方阵编号
|
|||
|
matrixName := row[0]
|
|||
|
// 标称倾角
|
|||
|
nominalTiltAngle := row[2]
|
|||
|
// 标称方位角
|
|||
|
nominalAzimuthAngle := row[3]
|
|||
|
|
|||
|
if len(strings.Split(matrixName, ".")) != 3 {
|
|||
|
continue
|
|||
|
}
|
|||
|
|
|||
|
transName := strings.ReplaceAll(strings.Split(matrixName, ".")[0], "G", "T")
|
|||
|
|
|||
|
groups[transName] = append(groups[transName], group{
|
|||
|
Name: matrixName,
|
|||
|
MatrixNumber: nominalTiltAngle,
|
|||
|
NominalTiltAngle: nominalAzimuthAngle,
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
// 根据子项目获取其所拥有的方阵
|
|||
|
fangzhenList := []entity.QianqiFangzhen{}
|
|||
|
if err := dao.QianqiFangzhen.Ctx(ctx).
|
|||
|
Where(dao.QianqiFangzhen.Columns().ProjectId, req.SubProjectID).
|
|||
|
Scan(&fangzhenList); err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
|
|||
|
// TODO: 统一更新具有相同标称倾角和标称方位角的名字
|
|||
|
for i := 0; i < len(fangzhenList); i++ {
|
|||
|
v := fangzhenList[i]
|
|||
|
// 遍历方阵
|
|||
|
for _, k := range groups[v.Name] {
|
|||
|
dao.PvModule.Ctx(ctx).Where(dao.PvModule.Columns().SubProjectid, v.ProjectId).
|
|||
|
Where(dao.PvModule.Columns().Name, k.Name).
|
|||
|
Data(
|
|||
|
g.Map{
|
|||
|
dao.PvModule.Columns().Tilt: k.MatrixNumber,
|
|||
|
dao.PvModule.Columns().Azimuth: k.NominalTiltAngle,
|
|||
|
},
|
|||
|
).Update()
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return &system.PvModuleAddExcelRes{}, nil
|
|||
|
}
|
|||
|
|
|||
|
// 为逆变器绑定设备ID
|
|||
|
func (c *pvModuleController) BindInverterDeviceID(ctx context.Context, req *system.PvModuleBindDeviceIDReq) (*system.PvModuleBindDeviceIDRes, error) {
|
|||
|
err := g.Try(ctx, func(ctx context.Context) {
|
|||
|
_, err := dao.PvModule.Ctx(ctx).Where(dao.PvModule.Columns().Id, req.ID).
|
|||
|
Data(g.Map{
|
|||
|
dao.PvModule.Columns().DeviceId: req.DeviceID,
|
|||
|
}).Update()
|
|||
|
liberr.ErrIsNil(ctx, err, "添加失败")
|
|||
|
})
|
|||
|
liberr.ErrIsNil(ctx, err, "添加失败")
|
|||
|
|
|||
|
return &system.PvModuleBindDeviceIDRes{}, nil
|
|||
|
}
|