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
|
||
}
|