hpds_jkw_web/internal/service/report.go

188 lines
6.2 KiB
Go

package service
import (
"context"
"fmt"
"git.hpds.cc/Component/logging"
"hpds-iot-web/internal/proto"
"hpds-iot-web/model"
"net/http"
"xorm.io/xorm"
"github.com/360EntSecGroup-Skylar/excelize"
)
type ReportService interface {
ReportList(ctx context.Context, req proto.ReportRequest) (rsp *proto.BaseResponse, err error)
GenerateReport(ctx context.Context, req proto.ReportRequest) (rsp *excelize.File, err error)
}
func NewReportService(engine *xorm.Engine, logger *logging.Logger) ReportService {
return &repo{
engine: engine,
logger: logger,
}
}
func (rp *repo) ReportList(ctx context.Context, req proto.ReportRequest) (rsp *proto.BaseResponse, err error) {
rsp = new(proto.BaseResponse)
select {
case <-ctx.Done():
err = fmt.Errorf("超时/取消")
rsp.Code = http.StatusInternalServerError
rsp.Status = http.StatusText(http.StatusInternalServerError)
rsp.Message = "超时/取消"
rsp.Err = ctx.Err()
return rsp, ctx.Err()
default:
data := make([]model.Report, 0)
count, err := rp.engine.
Where("(? = 0 or m.report_id = ?)", req.ReportId, req.ReportId).
And("t.status > 0").Limit(int(req.Size), int(((req.Page)-1)*req.Size)).
FindAndCount(&data)
if err != nil {
goto ReturnPoint
}
rsp.Code = http.StatusOK
rsp.Status = http.StatusText(http.StatusOK)
rsp.Message = "成功"
rsp = FillPaging(count, req.Page, req.Size, data, rsp)
rsp.Err = err
return rsp, err
}
ReturnPoint:
if err != nil {
rsp.Code = http.StatusInternalServerError
rsp.Status = http.StatusText(http.StatusInternalServerError)
rsp.Err = err
rsp.Message = "失败"
}
return rsp, err
}
func (rp *repo) GenerateReport(ctx context.Context, req proto.ReportRequest) (rsp *excelize.File, err error) {
//rsp = new(proto.BaseResponse)
select {
case <-ctx.Done():
err = fmt.Errorf("超时/取消")
//rsp.Code = http.StatusInternalServerError
//rsp.Status = http.StatusText(http.StatusInternalServerError)
//rsp.Message = "超时/取消"
//rsp.Err = ctx.Err()
return rsp, ctx.Err()
default:
//data := make([]model.Report, 0)
//_, err = rp.engine.
// Where("(? = 0 or m.report_id = ?)", req.ReportId, req.ReportId).
// And("t.status > 0").Limit(int(req.Size), int(((req.Page)-1)*req.Size)).
// FindAndCount(&data)
//if err != nil {
// goto ReturnPoint
//}
list := make([]proto.TaskResultItem, 2)
list[0] = proto.TaskResultItem{
FileId: 147,
FileName: "Y016 2.844 I 1 06272008 Color.jpg",
SrcFile: "http://127.0.0.1:9000/jky-data/road/test_dataset/Y016 2.844 I 1 06272008 Color.jpg",
DistFile: "http://127.0.0.1:9000/jky-data/road/test_dataset/Y016 2.844 I 1 06272008 Color.jpg",
DiseaseType: 4,
DiseaseLevel: 2,
KPile: "K229+778",
UpDown: 1,
LineNum: 2,
Length: 0.5,
Width: 1,
Area: 0.5,
HorizontalPositions: 0.5,
Memo: "有裂缝",
}
list[1] = proto.TaskResultItem{
FileId: 149,
FileName: "C279 0.132 I 1 06272008 Color.jpg",
SrcFile: "http://127.0.0.1:9000/jky-data/road/test_dataset/cba/C279 0.132 I 1 06272008 Color.jpg",
DistFile: "http://127.0.0.1:9000/jky-data/road/test_dataset/cba/C279 0.132 I 1 06272008 Color.jpg",
DiseaseType: 0,
DiseaseLevel: 0,
KPile: "",
UpDown: 0,
LineNum: 0,
Length: 0,
Width: 0,
Area: 0,
HorizontalPositions: 0,
}
disTypeList := make([]model.DiseaseType, 0)
err = model.DB.Find(&disTypeList)
if err != nil {
goto ReturnPoint
}
diseaseTypeList := make(map[int64]string)
for _, v := range disTypeList {
diseaseTypeList[v.TypeId] = v.TypeName
}
diseaseLevelList := make(map[int]string)
diseaseLevelList[1] = "一级"
diseaseLevelList[2] = "二级"
diseaseLevelList[3] = "三级"
xlsx := excelize.NewFile()
xlsx.MergeCell("Sheet1", "A1", "L1")
xlsx.MergeCell("Sheet1", "A2", "L2")
xlsx.MergeCell("Sheet1", "A3", "L3")
xlsx.MergeCell("Sheet1", "A4", "L4")
xlsx.SetCellValue("Sheet1", "A4", "病害明细")
//序号 路线编码 方向 桩号 车道 病害名称 程度 长度(m) 宽度(m) 面积(㎡) 横向位置 备注
xlsx.SetCellValue("Sheet1", "A5", "序号")
xlsx.SetCellValue("Sheet1", "B5", "路线编码")
xlsx.SetCellValue("Sheet1", "C5", "方向")
xlsx.SetCellValue("Sheet1", "D5", "桩号")
xlsx.SetCellValue("Sheet1", "E5", "车道")
xlsx.SetCellValue("Sheet1", "F5", "病害名称")
xlsx.SetCellValue("Sheet1", "G5", "程度")
xlsx.SetCellValue("Sheet1", "H5", "长度(m)")
xlsx.SetCellValue("Sheet1", "I5", "宽度(m)")
xlsx.SetCellValue("Sheet1", "J5", "面积(㎡)")
xlsx.SetCellValue("Sheet1", "K5", "横向位置")
xlsx.SetCellValue("Sheet1", "L5", "备注")
for k, v := range list {
xlsx.SetCellValue("Sheet1", fmt.Sprintf("A%d", k+6), k+1)
xlsx.SetCellValue("Sheet1", fmt.Sprintf("B%d", k+6), v.KPile)
switch v.UpDown {
case 1:
xlsx.SetCellValue("Sheet1", fmt.Sprintf("C%d", k+6), "上行")
case 2:
xlsx.SetCellValue("Sheet1", fmt.Sprintf("C%d", k+6), "下行")
}
xlsx.SetCellValue("Sheet1", fmt.Sprintf("D%d", k+6), v.KPile)
xlsx.SetCellValue("Sheet1", fmt.Sprintf("E%d", k+6), v.LineNum)
xlsx.SetCellValue("Sheet1", fmt.Sprintf("F%d", k+6), diseaseTypeList[int64(v.DiseaseType)])
xlsx.SetCellValue("Sheet1", fmt.Sprintf("G%d", k+6), diseaseLevelList[v.DiseaseLevel])
xlsx.SetCellValue("Sheet1", fmt.Sprintf("H%d", k+6), v.Length)
xlsx.SetCellValue("Sheet1", fmt.Sprintf("I%d", k+6), v.Width)
xlsx.SetCellValue("Sheet1", fmt.Sprintf("J%d", k+6), v.Area)
xlsx.SetCellValue("Sheet1", fmt.Sprintf("K%d", k+6), v.HorizontalPositions)
xlsx.SetCellValue("Sheet1", fmt.Sprintf("K%d", k+6), v.Memo)
}
//rsp = xlsx
//rsp.Code = http.StatusOK
//rsp.Status = http.StatusText(http.StatusOK)
//rsp.Message = "成功"
//rsp.Data = xlsx
//rsp.Err = err
return xlsx, err
}
ReturnPoint:
if err != nil {
rsp = nil
//rsp.Code = http.StatusInternalServerError
//rsp.Status = http.StatusText(http.StatusInternalServerError)
//rsp.Err = err
//rsp.Message = "失败"
}
return rsp, err
}