v3.0.0-alpha - added XML, XLSX outputs.

This commit is contained in:
MickMake 2022-11-30 21:54:22 +11:00
parent 745075a729
commit 5c9767ee9d
58 changed files with 1165 additions and 1527 deletions

1293
.idea/workspace.xml generated

File diff suppressed because it is too large Load Diff

View File

@ -40,8 +40,8 @@ func (c *CmdData) AttachCommand(cmd *cobra.Command) *cobra.Command {
Use: "data",
Aliases: []string{},
Annotations: map[string]string{"group": "Data"},
Short: fmt.Sprintf("High-level iSolarCloud functions."),
Long: fmt.Sprintf("High-level iSolarCloud functions."),
Short: fmt.Sprintf("High-level iSolarCloud data fetching."),
Long: fmt.Sprintf("High-level iSolarCloud data fetching."),
DisableFlagParsing: false,
DisableFlagsInUseLine: false,
PreRunE: func(cmd *cobra.Command, args []string) error {
@ -63,7 +63,7 @@ func (c *CmdData) AttachCommand(cmd *cobra.Command) *cobra.Command {
cmd.AddCommand(c.SelfCmd)
c.SelfCmd.Example = cmdHelp.PrintExamples(c.SelfCmd, "get <endpoint>", "put <endpoint>")
// ********************************************************************************
// ******************************************************************************** //
var cmdDataGet = &cobra.Command{
Use: output.StringTypeList + " <[area.]endpoint> [endpoint args ...]",
Aliases: []string{"get"},
@ -89,7 +89,7 @@ func (c *CmdData) AttachCommand(cmd *cobra.Command) *cobra.Command {
c.SelfCmd.AddCommand(cmdDataGet)
cmdDataGet.Example = cmdHelp.PrintExamples(cmdDataGet, "queryDeviceList", "WebAppService.showPSView", "stats")
// ********************************************************************************
// ******************************************************************************** //
var cmdDataTable = &cobra.Command{
Use: output.StringTypeTable + " <[area.]endpoint> [endpoint args ...]",
Aliases: []string{},
@ -115,7 +115,7 @@ func (c *CmdData) AttachCommand(cmd *cobra.Command) *cobra.Command {
c.SelfCmd.AddCommand(cmdDataTable)
cmdDataGet.Example = cmdHelp.PrintExamples(cmdDataTable, "queryDeviceList", "WebAppService.showPSView", "stats")
// ********************************************************************************
// ******************************************************************************** //
var cmdDataRaw = &cobra.Command{
Use: output.StringTypeRaw + " <[area.]endpoint> [endpoint args ...]",
Aliases: []string{},
@ -139,9 +139,9 @@ func (c *CmdData) AttachCommand(cmd *cobra.Command) *cobra.Command {
Args: cobra.MinimumNArgs(0),
}
c.SelfCmd.AddCommand(cmdDataRaw)
cmdDataRaw.Example = cmdHelp.PrintExamples(cmdDataRaw, "[area.]<endpoint>")
cmdDataRaw.Example = cmdHelp.PrintExamples(cmdDataRaw, "queryDeviceList", "WebAppService.showPSView", "stats")
// ********************************************************************************
// ******************************************************************************** //
var cmdDataJson = &cobra.Command{
Use: output.StringTypeJson + " <[area.]endpoint> [endpoint args ...]",
Aliases: []string{},
@ -167,7 +167,7 @@ func (c *CmdData) AttachCommand(cmd *cobra.Command) *cobra.Command {
c.SelfCmd.AddCommand(cmdDataJson)
cmdDataJson.Example = cmdHelp.PrintExamples(cmdDataJson, "queryDeviceList", "WebAppService.showPSView", "stats")
// ********************************************************************************
// ******************************************************************************** //
var cmdDataCsv = &cobra.Command{
Use: output.StringTypeCsv + " <[area.]endpoint> [endpoint args ...]",
Aliases: []string{},
@ -193,7 +193,7 @@ func (c *CmdData) AttachCommand(cmd *cobra.Command) *cobra.Command {
c.SelfCmd.AddCommand(cmdDataCsv)
cmdDataCsv.Example = cmdHelp.PrintExamples(cmdDataCsv, "queryDeviceList", "WebAppService.showPSView", "stats")
// ********************************************************************************
// ******************************************************************************** //
var cmdDataGraph = &cobra.Command{
Use: output.StringTypeGraph + " <[area.]endpoint> [endpoint args ...]",
Aliases: []string{},
@ -219,6 +219,58 @@ func (c *CmdData) AttachCommand(cmd *cobra.Command) *cobra.Command {
c.SelfCmd.AddCommand(cmdDataGraph)
cmdDataGraph.Example = cmdHelp.PrintExamples(cmdDataGraph, "queryDeviceList", "WebAppService.showPSView", "stats")
// ******************************************************************************** //
var cmdApiXML = &cobra.Command{
Use: output.StringTypeXML + " <[area.]endpoint> [endpoint args ...]",
Aliases: []string{},
Annotations: map[string]string{"group": "Data"},
Short: fmt.Sprintf("Get data from iSolarCloud (xml)"),
Long: fmt.Sprintf("Get data from iSolarCloud (xml)"),
DisableFlagParsing: false,
DisableFlagsInUseLine: false,
PreRunE: func(cmd *cobra.Command, args []string) error {
cmds.Error = cmds.ProcessArgs(cmd, args)
if cmds.Error != nil {
return cmds.Error
}
cmds.Error = cmds.SunGrowArgs(cmd, args)
if cmds.Error != nil {
return cmds.Error
}
return nil
},
RunE: c.GetEndpoints,
Args: cobra.MinimumNArgs(0),
}
c.SelfCmd.AddCommand(cmdApiXML)
cmdApiXML.Example = cmdHelp.PrintExamples(cmdApiXML, "queryDeviceList", "WebAppService.showPSView")
// ******************************************************************************** //
var cmdApiXLSX = &cobra.Command{
Use: output.StringTypeXLSX + " <[area.]endpoint> [endpoint args ...]",
Aliases: []string{},
Annotations: map[string]string{"group": "Data"},
Short: fmt.Sprintf("Get data from iSolarCloud (XLSX)"),
Long: fmt.Sprintf("Get data from iSolarCloud (XLSX)"),
DisableFlagParsing: false,
DisableFlagsInUseLine: false,
PreRunE: func(cmd *cobra.Command, args []string) error {
cmds.Error = cmds.ProcessArgs(cmd, args)
if cmds.Error != nil {
return cmds.Error
}
cmds.Error = cmds.SunGrowArgs(cmd, args)
if cmds.Error != nil {
return cmds.Error
}
return nil
},
RunE: c.GetEndpoints,
Args: cobra.MinimumNArgs(0),
}
c.SelfCmd.AddCommand(cmdApiXLSX)
cmdApiXLSX.Example = cmdHelp.PrintExamples(cmdApiXLSX, "queryDeviceList", "WebAppService.showPSView")
// ******************************************************************************** //
var cmdApiStruct = &cobra.Command{
Use: output.StringTypeStruct + " <[area.]endpoint> [endpoint args ...]",
@ -253,6 +305,10 @@ func (c *CmdData) GetEndpoints(cmd *cobra.Command, args []string) error {
// endpoints string, psIds string, date string
for range Only.Once {
cmds.Api.SunGrow.SetOutputType(cmd.Name())
if cmd.Name() == output.StringTypeXLSX {
cmds.Api.SaveFile = true
}
args = cmdConfig.FillArray(2, args)
eps := iSolarCloud.SplitArg(args[0])
@ -260,9 +316,8 @@ func (c *CmdData) GetEndpoints(cmd *cobra.Command, args []string) error {
data.SetOutput(cmd.Name())
data.SetSaveAsFile(cmds.Api.SaveFile)
data.SetEndpoints(eps...)
data.SetArgs(args[1:]...)
c.Error = data.GetData()
c.Error = data.GetData(args[1:]...)
if c.Error != nil {
break
}

View File

@ -361,9 +361,9 @@ func (ca *Cmds) MqttCron() error {
break
}
// All := []string{ "queryDeviceList", "getPsList", "getPsDetailWithPsType", "getPsDetail" }
All := []string{ "queryDeviceList", "getPsList", "getPsDetailWithPsType", "getPsDetail"} //, queryMutiPointDataList, getDevicePointMinuteDataList }
// All := []string{ "queryDeviceList", "WebIscmAppService.queryDeviceListForBackSys", "WebIscmAppService.getDeviceModel" }
All := []string{ "WebIscmAppService.getDeviceModel" }
// All := []string{ "WebIscmAppService.getDeviceModel" }
data.SetEndpoints(All...)
ca.Error = data.GetData()
if ca.Error != nil {

View File

@ -30,7 +30,7 @@ type ResultData struct {
AlarmCount valueTypes.Count `json:"alarm_count"`
DevFaultStatus valueTypes.Integer `json:"dev_fault_status"`
DevStatus valueTypes.Integer `json:"dev_status"`
DevUpdateTime valueTypes.DateTime `json:"dev_update_time"`
DevUpdateTime valueTypes.DateTime `json:"dev_update_time" PointNameDateFormat:"2006/01/02 15:04:05"`
FaultCount valueTypes.Count `json:"fault_count"`
InstallerAlarmCount valueTypes.Count `json:"installer_alarm_count"`
InstallerDevFaultStatus valueTypes.Integer `json:"installer_dev_fault_status"`
@ -60,7 +60,7 @@ type ResultData struct {
P81202 interface{} `json:"p81202"`
P81203 interface{} `json:"p81203"`
PsKey valueTypes.PsKey `json:"ps_key"`
UpdateTime valueTypes.DateTime `json:"update_time"`
UpdateTime valueTypes.DateTime `json:"update_time" PointNameDateFormat:"2006/01/02 15:04:05"`
UpdateUser valueTypes.Integer `json:"update_user"`
UUID valueTypes.Integer `json:"uuid"`
} `json:"device_point_data" DataTable:"true"`

View File

@ -25,13 +25,13 @@ func (rd RequestData) Help() string {
type ResultData struct {
Echartunit valueTypes.String `json:"echartunit" PointId:"echart_unit"`
EndTime valueTypes.DateTime `json:"endTime" PointId:"end_time"`
EndTime valueTypes.DateTime `json:"endTime" PointId:"end_time" PointNameDateFormat:"2006/01/02 15:04:05"`
EnergyMap struct {
ValStr valueTypes.String `json:"valStr" PointId:"val_str"`
} `json:"energyMap" PointId:"energy_map"`
Energyunit valueTypes.String `json:"energyunit" PointId:"energy_unit"`
PowerMap struct {
Dates []valueTypes.DateTime `json:"dates"`
Dates []valueTypes.DateTime `json:"dates" PointNameDateFormat:"2006/01/02 15:04:05"`
Units valueTypes.String `json:"units"`
ValStr valueTypes.String `json:"valStr" PointId:"val_str"`
} `json:"powerMap" PointId:"power_map"`

View File

@ -31,8 +31,8 @@ type ResultData struct {
ChannelId valueTypes.Integer `json:"chnnl_id" PointId:"channel_id"`
ChannelName valueTypes.String `json:"chnnl_name" PointId:"channel_name"`
ChannelDesc interface{} `json:"chnnl_desc" PointId:"channel_description"`
CreateTime valueTypes.DateTime `json:"create_time"`
UpdateDate valueTypes.DateTime `json:"update_date"`
CreateTime valueTypes.DateTime `json:"create_time" PointNameDateFormat:"2006/01/02 15:04:05"`
UpdateDate valueTypes.DateTime `json:"update_date" PointNameDateFormat:"2006/01/02 15:04:05"`
DataFlag valueTypes.Integer `json:"data_flag"`
DataFlagDetail valueTypes.Integer `json:"data_flag_detail"`
IsAuto valueTypes.Bool `json:"is_auto"`

View File

@ -39,7 +39,7 @@ type ResultData struct {
DevStatus valueTypes.Integer `json:"dev_status"`
DeviceArea valueTypes.Integer `json:"device_area"`
DeviceCode valueTypes.Integer `json:"device_code"`
DeviceFactoryDate valueTypes.DateTime `json:"device_factory_date"`
DeviceFactoryDate valueTypes.DateTime `json:"device_factory_date" PointNameDateFormat:"2006/01/02 15:04:05"`
DeviceId valueTypes.Integer `json:"device_id"`
DeviceModel valueTypes.String `json:"device_model"`
DeviceModelCode valueTypes.String `json:"device_model_code"`

View File

@ -52,12 +52,12 @@ func (e *ResultData) UnmarshalJSON(data []byte) error {
type DataPoint struct {
GoStruct GoStruct.GoStruct `json:"-" PointIdReplace:"true" PointIdFrom:"TimeStamp" PointNameDateFormat:"20060102-150405" PointTimestampFrom:"TimeStamp"`
GoStruct GoStruct.GoStruct `json:"-" PointIdReplace:"true" PointIdFrom:"TimeStamp" PointNameDateFormat:"20060102-150405" PointTimestampFrom:"TimeStamp"`
TimeStamp valueTypes.DateTime `json:"time_stamp"`
TimeStamp valueTypes.DateTime `json:"time_stamp" PointNameDateFormat:"2006/01/02 15:04:05"`
Points map[string]valueTypes.UnitValue `json:"points"`
// P13148 valueTypes.Integer `json:"p13148"`
IsPlatformDefaultUnit valueTypes.Bool `json:"is_platform_default_unit"`
IsPlatformDefaultUnit valueTypes.Bool `json:"is_platform_default_unit"`
}
func (e *DataPoint) UnmarshalJSON(data []byte) error {
@ -116,10 +116,6 @@ func (e *ResultData) IsValid() error {
func (e *EndPoint) GetData() api.DataMap {
entries := api.NewDataMap()
for range Only.Once {
entries.StructToDataMap(*e, e.Request.PsKey.String(), GoStruct.NewEndPointPath(e.Request.PsKey.String()))
}
entries.StructToDataMap(*e, e.Request.PsKey.String(), GoStruct.NewEndPointPath(e.Request.PsKey.String()))
return entries
}

View File

@ -34,25 +34,25 @@ type ResultData struct {
CountyAllowanceMoney interface{} `json:"county_allowance_money"`
DefaultCharge valueTypes.Float `json:"default_charge"`
ElectricChargeId valueTypes.Integer `json:"electric_charge_id"`
EndTime valueTypes.DateTime `json:"end_time"`
EndTime valueTypes.DateTime `json:"end_time" PointNameDateFormat:"2006/01/02 15:04:05"`
IncomeStyle interface{} `json:"income_style"`
IntervalTimeCharge interface{} `json:"interval_time_charge"`
NationAllowanceMoney interface{} `json:"nation_allowance_money"`
ParamIncomeUnit valueTypes.Integer `json:"param_income_unit"`
ProvinceAllowanceMoney interface{} `json:"province_allowance_money"`
PsId valueTypes.PsId `json:"ps_id"`
StartTime valueTypes.DateTime `json:"start_time"`
StartTime valueTypes.DateTime `json:"start_time" PointNameDateFormat:"2006/01/02 15:04:05"`
UseSharpPeekValleyFlat interface{} `json:"use_sharp_peek_valley_flat"`
ValidFlag valueTypes.Bool `json:"valid_flag"`
} `json:"powerElectricalChargeMap" PointId:"power_electrical_charge_map"`
PowerIntervalTimesChargeMap interface{} `json:"powerIntevalTimesChargeMap" PointId:"power_interval_times_charge_map"`
PowerSelfUseTimesChargeMap struct {
DefaultCharge valueTypes.Float `json:"default_charge"`
EndTime valueTypes.DateTime `json:"end_time"`
EndTime valueTypes.DateTime `json:"end_time" PointNameDateFormat:"2006/01/02 15:04:05"`
IntervalTimeCharge valueTypes.String `json:"interval_time_charge"`
OnlineElectricityPercent valueTypes.Float `json:"online_electricity_percent" PointUnit:"%"`
PsId valueTypes.PsId `json:"ps_id"`
StartTime valueTypes.DateTime `json:"start_time"`
StartTime valueTypes.DateTime `json:"start_time" PointNameDateFormat:"2006/01/02 15:04:05"`
UseElectricityDiscount valueTypes.Float `json:"use_electricity_discount" PointUnit:"%"`
} `json:"powerSelfUseTimesChargeMap" PointId:"power_selfuse_times_charge_map"`
PsId valueTypes.PsId `json:"ps_id"`

View File

@ -30,9 +30,9 @@ type ResultData struct {
BatchId valueTypes.String `json:"batch_id"`
CommandStatus valueTypes.Integer `json:"command_status"`
CommandType valueTypes.Integer `json:"command_type"`
CreateTime valueTypes.DateTime `json:"create_time"`
OverTime valueTypes.DateTime `json:"over_time"`
UpdateTime valueTypes.DateTime `json:"update_time"`
CreateTime valueTypes.DateTime `json:"create_time" PointNameDateFormat:"2006/01/02 15:04:05"`
OverTime valueTypes.DateTime `json:"over_time" PointNameDateFormat:"2006/01/02 15:04:05"`
UpdateTime valueTypes.DateTime `json:"update_time" PointNameDateFormat:"2006/01/02 15:04:05"`
ExpireSecond valueTypes.Integer `json:"expire_second"`
DeviceCode valueTypes.Integer `json:"device_code"`
DeviceModel valueTypes.String `json:"device_model"`

View File

@ -39,9 +39,9 @@ type ResultData struct {
OperateUserId valueTypes.Integer `json:"operate_user_id"`
CommandStatus valueTypes.Integer `json:"command_status"`
CommandType valueTypes.Integer `json:"command_type"`
CreateTime valueTypes.DateTime `json:"create_time"`
UpdateTime valueTypes.DateTime `json:"update_time"`
OverTime valueTypes.DateTime `json:"over_time"`
CreateTime valueTypes.DateTime `json:"create_time" PointNameDateFormat:"2006/01/02 15:04:05"`
UpdateTime valueTypes.DateTime `json:"update_time" PointNameDateFormat:"2006/01/02 15:04:05"`
OverTime valueTypes.DateTime `json:"over_time" PointNameDateFormat:"2006/01/02 15:04:05"`
SetCancelNum valueTypes.Count `json:"set_cancel_num"`
SetFailNum valueTypes.Count `json:"set_fail_num"`
SetFinishNum valueTypes.Count `json:"set_finish_num"`

View File

@ -32,7 +32,7 @@ type ResultData struct {
DesignCapacity valueTypes.Float `json:"design_capacity"`
Email valueTypes.String `json:"email"`
EnergyScheme interface{} `json:"energy_scheme"`
ExpectInstallDate valueTypes.DateTime `json:"expect_install_date"`
ExpectInstallDate valueTypes.DateTime `json:"expect_install_date" PointNameDateFormat:"2006/01/02 15:04:05"`
FaultSendType interface{} `json:"fault_send_type"`
GcjLatitude valueTypes.Float `json:"gcj_latitude"`
GcjLongitude valueTypes.Float `json:"gcj_longitude"`
@ -45,7 +45,7 @@ type ResultData struct {
ParamIncome valueTypes.Float `json:"param_income"`
Prov interface{} `json:"prov"`
ProvCode interface{} `json:"prov_code"`
PsBuildDate valueTypes.DateTime `json:"ps_build_date"`
PsBuildDate valueTypes.DateTime `json:"ps_build_date" PointNameDateFormat:"2006/01/02 15:04:05"`
PsCountryId valueTypes.Integer `json:"ps_country_id"`
PsDesc interface{} `json:"ps_desc"`
PsHolder valueTypes.String `json:"ps_holder"`

View File

@ -54,14 +54,14 @@ type ResultData struct {
DivisionCode valueTypes.String `json:"division_code"`
Email valueTypes.String `json:"email"`
EnergyScheme interface{} `json:"energy_scheme"`
ExpectInstallDate valueTypes.DateTime `json:"expect_install_date"`
ExpectInstallDate valueTypes.DateTime `json:"expect_install_date" PointNameDateFormat:"2006/01/02 15:04:05"`
GcjLatitude valueTypes.Float `json:"gcj_latitude"`
GcjLongitude valueTypes.Float `json:"gcj_longitude"`
GprsLatitude valueTypes.Float `json:"gprs_latitude"`
GprsLongitude valueTypes.Float `json:"gprs_longitude"`
GridLevel interface{} `json:"grid_level"`
InstallDate valueTypes.DateTime `json:"install_date"`
InstallDateZone valueTypes.DateTime `json:"install_date_zone"`
InstallDate valueTypes.DateTime `json:"install_date" PointNameDateFormat:"2006/01/02 15:04:05"`
InstallDateZone valueTypes.DateTime `json:"install_date_zone" PointNameDateFormat:"2006/01/02 15:04:05"`
InverterCount valueTypes.Integer `json:"inverter_count"`
InvestmentType valueTypes.Integer `json:"investment_type"`
InvestmentTypeDesc valueTypes.String `json:"investment_type_desc"`
@ -91,7 +91,7 @@ type ResultData struct {
ParamIncomeUnitName valueTypes.String `json:"param_income_unit_name"`
ProvinceCode valueTypes.String `json:"province_code"`
ProvinceName valueTypes.String `json:"province_name"`
PsBuildDate valueTypes.DateTime `json:"ps_build_date"`
PsBuildDate valueTypes.DateTime `json:"ps_build_date" PointNameDateFormat:"2006/01/02 15:04:05"`
PsCountryId valueTypes.Integer `json:"ps_country_id"`
PsCreateUserId valueTypes.Integer `json:"ps_create_user_id"`
PsCurrentTimeZone valueTypes.String `json:"ps_current_time_zone"`
@ -107,8 +107,8 @@ type ResultData struct {
PsTypeDesc valueTypes.String `json:"ps_type_desc"`
PsTypeName valueTypes.String `json:"ps_type_name"`
PsUserId valueTypes.Integer `json:"ps_user_id"`
RecordCreateTime valueTypes.DateTime `json:"recore_create_time" PointId:"record_create_time"`
SafeStartDate valueTypes.DateTime `json:"safe_start_date"`
RecordCreateTime valueTypes.DateTime `json:"recore_create_time" PointId:"record_create_time" PointNameDateFormat:"2006/01/02 15:04:05"`
SafeStartDate valueTypes.DateTime `json:"safe_start_date" PointNameDateFormat:"2006/01/02 15:04:05"`
SetUserOrg valueTypes.Integer `json:"set_user_org"`
ShareType valueTypes.Integer `json:"share_type"`
ShareUserType interface{} `json:"share_user_type"`

View File

@ -38,7 +38,7 @@ type ResultData struct {
DesignCapacity valueTypes.Float `json:"design_capacity" PointUnit:"W"`
Email valueTypes.String `json:"email"`
EnergyScheme Common.Unknown `json:"energy_scheme"`
ExpectInstallDate valueTypes.DateTime `json:"expect_install_date"`
ExpectInstallDate valueTypes.DateTime `json:"expect_install_date" PointNameDateFormat:"2006/01/02 15:04:05"`
FaultSendType Common.Unknown `json:"fault_send_type"`
GcjLatitude valueTypes.Float `json:"gcj_latitude"`
GcjLongitude valueTypes.Float `json:"gcj_longitude"`
@ -51,7 +51,7 @@ type ResultData struct {
ParamIncome valueTypes.Float `json:"param_income"`
Prov Common.Unknown `json:"prov"`
ProvCode Common.Unknown `json:"prov_code"`
PsBuildDate valueTypes.DateTime `json:"ps_build_date"`
PsBuildDate valueTypes.DateTime `json:"ps_build_date" PointNameDateFormat:"2006/01/02 15:04:05"`
PsCountryId valueTypes.Integer `json:"ps_country_id"`
PsDesc Common.Unknown `json:"ps_desc"`
PsHolder valueTypes.String `json:"ps_holder"`
@ -59,7 +59,7 @@ type ResultData struct {
PsLocation valueTypes.String `json:"ps_location"`
PsName valueTypes.String `json:"ps_name"`
PsType valueTypes.Integer `json:"ps_type"`
RecordCreateTime valueTypes.DateTime `json:"recore_create_time" PointId:"record_create_time"`
RecordCreateTime valueTypes.DateTime `json:"recore_create_time" PointId:"record_create_time" PointNameDateFormat:"2006/01/02 15:04:05"`
ReportType Common.Unknown `json:"report_type"`
ShippingAddress valueTypes.String `json:"shipping_address"`
ShippingZipCode valueTypes.String `json:"shipping_zip_code"`
@ -84,10 +84,10 @@ type ResultData struct {
CodeType valueTypes.Integer `json:"code_type"`
DefaultCharge valueTypes.Float `json:"default_charge"`
ElectricChargeId valueTypes.Integer `json:"electric_charge_id"`
EndTime valueTypes.DateTime `json:"end_time"`
EndTime valueTypes.DateTime `json:"end_time" PointNameDateFormat:"2006/01/02 15:04:05"`
IntervalTimeCharge Common.Unknown `json:"interval_time_charge"`
ParamIncomeUnitName valueTypes.String `json:"param_income_unit_name"`
StartTime valueTypes.DateTime `json:"start_time"`
StartTime valueTypes.DateTime `json:"start_time" PointNameDateFormat:"2006/01/02 15:04:05"`
} `json:"powerChargeDataMap" PointId:"power_charge_data_map"`
SysTimeZones []struct {

View File

@ -66,7 +66,7 @@ type ResultData struct {
P13150MapVirgin valueTypes.UnitValue `json:"p13150_map_virgin" PointIgnore:"true"`
P13155 valueTypes.Float `json:"p13155" PointId:"p13155" PointDeviceFrom:"PsKey" PointUpdateFreq:"UpdateFreqInstant"`
PsKey valueTypes.PsKey `json:"ps_key"`
UpdateTime valueTypes.DateTime `json:"update_time"`
UpdateTime valueTypes.DateTime `json:"update_time" PointNameDateFormat:"2006/01/02 15:04:05"`
UUID valueTypes.Integer `json:"uuid"`
EnergyFlow []valueTypes.Integer `json:"energy_flow" PointName:"Energy Flow" PointIgnoreZero:"false" PointArrayFlatten:"true"`
} `json:"storage_inverter_data" PointIdReplace:"true" PointIdFromChild:"PsKey" DataTable:"false"`
@ -78,7 +78,7 @@ type ResultData struct {
AlarmCount valueTypes.Count `json:"alarm_count"`
AreaId interface{} `json:"area_id"`
AreaType valueTypes.Integer `json:"area_type"`
BuildDate valueTypes.DateTime `json:"build_date"`
BuildDate valueTypes.DateTime `json:"build_date" PointNameDateFormat:"2006/01/02 15:04:05"`
Co2Reduce valueTypes.UnitValue `json:"co2_reduce"`
Co2ReduceTotal valueTypes.UnitValue `json:"co2_reduce_total" PointId:"co2_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
CoalReduce valueTypes.UnitValue `json:"coal_reduce"`
@ -87,14 +87,14 @@ type ResultData struct {
ConnectType valueTypes.Integer `json:"connect_type"`
ContactPerson valueTypes.String `json:"contact_person"`
CurrPower valueTypes.UnitValue `json:"curr_power"` // Pv Power
DataLastUpdateTime valueTypes.DateTime `json:"data_last_update_time"`
DataLastUpdateTime valueTypes.DateTime `json:"data_last_update_time" PointNameDateFormat:"2006/01/02 15:04:05"`
DayEqHours valueTypes.Float `json:"day_eq_hours" PointUnit:"h" PointUpdateFreq:"UpdateFreqDay"`
Description interface{} `json:"description"`
DesignCapacity valueTypes.UnitValue `json:"design_capacity"`
DesignCapacityBattery valueTypes.UnitValue `json:"design_capacity_battery"`
DiagramURL valueTypes.String `json:"diagram_url"`
EnergyScheme interface{} `json:"energy_scheme"`
ExpectInstallDate valueTypes.DateTime `json:"expect_install_date"`
ExpectInstallDate valueTypes.DateTime `json:"expect_install_date" PointNameDateFormat:"2006/01/02 15:04:05"`
FaultCount valueTypes.Count `json:"fault_count"`
FaultSendType valueTypes.String `json:"fault_send_type"`
GcjLatitude valueTypes.Float `json:"gcj_latitude"`
@ -102,7 +102,7 @@ type ResultData struct {
GprsLatitude valueTypes.Float `json:"gprs_latitude"`
GprsLongitude valueTypes.Float `json:"gprs_longitude"`
HasAmmeter valueTypes.Bool `json:"has_ammeter"`
InstallDate valueTypes.DateTime `json:"install_date"`
InstallDate valueTypes.DateTime `json:"install_date" PointNameDateFormat:"2006/01/02 15:04:05"`
InstallerPsFaultStatus valueTypes.Integer `json:"installer_ps_fault_status"`
IsHaveEsInverter valueTypes.Bool `json:"is_have_es_inverter"`
IsTransformSystem valueTypes.Bool `json:"is_transform_system"`
@ -218,9 +218,9 @@ type ResultData struct {
PsTypeName valueTypes.String `json:"ps_type_name"`
PsWindLevel valueTypes.String `json:"ps_wind_level"`
PsWindPos valueTypes.String `json:"ps_wind_pos"`
RecordCreateTime valueTypes.DateTime `json:"recore_create_time" PointId:"record_create_time"`
RecordCreateTime valueTypes.DateTime `json:"recore_create_time" PointId:"record_create_time" PointNameDateFormat:"2006/01/02 15:04:05"`
ReportType valueTypes.String `json:"report_type"`
SafeStartDate valueTypes.DateTime `json:"safe_start_date"`
SafeStartDate valueTypes.DateTime `json:"safe_start_date" PointNameDateFormat:"2006/01/02 15:04:05"`
SelfConsumptionOffsetReminder valueTypes.Integer `json:"self_consumption_offset_reminder"`
ShippingAddress valueTypes.String `json:"shipping_address"`
ShippingZipCode valueTypes.String `json:"shipping_zip_code"`

View File

@ -36,7 +36,7 @@ type ResultData struct {
AreaId interface{} `json:"area_id" PointId:"area_id"`
AreaType valueTypes.Integer `json:"area_type" PointId:"area_type"`
ArrearsStatus valueTypes.Integer `json:"arrears_status" PointId:"arrears_status"`
BuildDate valueTypes.DateTime `json:"build_date" PointId:"build_date" PointUpdateFreq:"UpdateFreqBoot"`
BuildDate valueTypes.DateTime `json:"build_date" PointId:"build_date" PointUpdateFreq:"UpdateFreqBoot" PointNameDateFormat:"2006/01/02 15:04:05"`
BuildStatus valueTypes.Integer `json:"build_status" PointId:"build_status" PointUpdateFreq:"UpdateFreqBoot"`
Co2Reduce valueTypes.UnitValue `json:"co2_reduce" PointId:"co2_reduce"`
Co2ReduceTotal valueTypes.UnitValue `json:"co2_reduce_total" PointId:"co2_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
@ -47,7 +47,7 @@ type ResultData struct {
DesignCapacityUnit valueTypes.String `json:"design_capacity_unit" PointId:"design_capacity_unit"`
DesignCapacityVirgin valueTypes.Float `json:"design_capacity_virgin" PointIgnore:"true"`
EquivalentHour valueTypes.UnitValue `json:"equivalent_hour" PointId:"equivalent_hour" PointUpdateFreq:"UpdateFreqDay"`
ExpectInstallDate valueTypes.DateTime `json:"expect_install_date" PointId:"expect_install_date"`
ExpectInstallDate valueTypes.DateTime `json:"expect_install_date" PointId:"expect_install_date" PointNameDateFormat:"2006/01/02 15:04:05"`
FaultAlarmOfflineDevCount valueTypes.Count `json:"fault_alarm_offline_dev_count" PointId:"fault_alarm_offline_dev_count"`
FaultCount valueTypes.Count `json:"fault_count" PointId:"fault_count"`
FaultDevCount valueTypes.Count `json:"fault_dev_count" PointId:"fault_dev_count"`
@ -55,7 +55,7 @@ type ResultData struct {
GcjLongitude valueTypes.Float `json:"gcj_longitude" PointId:"gcj_longitude"`
GprsLatitude valueTypes.Float `json:"gprs_latitude" PointId:"gprs_latitude"`
GprsLongitude valueTypes.Float `json:"gprs_longitude" PointId:"gprs_longitude"`
InstallDate valueTypes.DateTime `json:"install_date" PointId:"install_date"`
InstallDate valueTypes.DateTime `json:"install_date" PointId:"install_date" PointNameDateFormat:"2006/01/02 15:04:05"`
InstalledPowerMap valueTypes.UnitValue `json:"installed_power_map" PointId:"installed_power_map"`
InstalledPowerVirgin valueTypes.Float `json:"installed_power_virgin" PointIgnore:"true"`
InstallerAlarmCount valueTypes.Count `json:"installer_alarm_count" PointId:"installer_alarm_count"`
@ -129,8 +129,8 @@ type ResultData struct {
PsType valueTypes.Integer `json:"ps_type" PointId:"ps_type"`
Radiation valueTypes.UnitValue `json:"radiation" PointId:"radiation"`
RadiationVirgin valueTypes.Float `json:"radiation_virgin" PointIgnore:"true"`
RecordCreateTime valueTypes.DateTime `json:"recore_create_time" PointId:"record_create_time"`
SafeStartDate valueTypes.DateTime `json:"safe_start_date" PointId:"safe_start_date"`
RecordCreateTime valueTypes.DateTime `json:"recore_create_time" PointId:"record_create_time" PointNameDateFormat:"2006/01/02 15:04:05"`
SafeStartDate valueTypes.DateTime `json:"safe_start_date" PointId:"safe_start_date" PointNameDateFormat:"2006/01/02 15:04:05"`
ShareType valueTypes.Integer `json:"share_type" PointId:"share_type"`
ShippingAddress valueTypes.String `json:"shipping_address" PointId:"shipping_address"`
ShippingZipCode valueTypes.String `json:"shipping_zip_code" PointId:"shipping_zip_code"`

View File

@ -31,7 +31,7 @@ type ResultData struct {
DesignCapacity valueTypes.Float `json:"design_capacity" PointUnit:"W"`
GprsLatitude valueTypes.Float `json:"gprs_latitude"`
GprsLongitude valueTypes.Float `json:"gprs_longitude"`
InstallDate valueTypes.DateTime `json:"install_date"`
InstallDate valueTypes.DateTime `json:"install_date" PointNameDateFormat:"2006/01/02 15:04:05"`
InstallerPsFaultStatus valueTypes.Integer `json:"installer_ps_fault_status"`
Latitude valueTypes.Float `json:"latitude"`
Location valueTypes.String `json:"location"`

View File

@ -55,7 +55,7 @@ type ResultData struct {
}
type TotalData struct {
MinDateId valueTypes.DateTime `json:"min_date_id"`
MinDateId valueTypes.DateTime `json:"min_date_id" PointNameDateFormat:"2006/01/02 15:04:05"`
Co2Reduce valueTypes.Float `json:"co2_reduce" PointUnitFrom:"Co2ReduceOriginalUnit"`
Co2ReduceMap valueTypes.UnitValue `json:"co2_reduce_map"`

View File

@ -28,7 +28,7 @@ type ResultData struct {
BloodType valueTypes.String `json:"blood_type"`
CountryId valueTypes.Integer `json:"country_id"`
CountryName valueTypes.String `json:"country_name"`
CreateDate valueTypes.DateTime `json:"create_date"`
CreateDate valueTypes.DateTime `json:"create_date" PointNameDateFormat:"2006/01/02 15:04:05"`
CreateUserId valueTypes.Integer `json:"create_user_id"`
DiseaseHis valueTypes.String `json:"disease_his"`
Email valueTypes.String `json:"email"`

View File

@ -29,7 +29,7 @@ type ResultData struct {
Chill valueTypes.Float `json:"chill"`
Code valueTypes.Float `json:"code"`
CodeName valueTypes.String `json:"code_name"`
DateTime valueTypes.DateTime `json:"date_time" PointIgnore:"true"`
DateTime valueTypes.DateTime `json:"date_time" PointIgnore:"true" PointNameDateFormat:"2006/01/02 15:04:05"`
Direction valueTypes.Float `json:"direction"`
High valueTypes.Float `json:"high" PointUnit:"F"`
Highc valueTypes.Float `json:"highc" PointUnit:"C"`

View File

@ -38,7 +38,7 @@ type DataList struct {
DateId valueTypes.DateTime `json:"date_id" PointTimestampFrom:"UpdateTime" PointNameDateFormat:"20060102"`
PsId valueTypes.PsId `json:"ps_id" PointTimestampFrom:"UpdateTime"`
TimeStamp valueTypes.Generic `json:"time_stamp" PointTimestampFrom:"UpdateTime"` // Sad that this alternates between string and valueTypes.Integer.
UpdateTime valueTypes.DateTime `json:"update_time" PointTimestampFrom:"UpdateTime"`
UpdateTime valueTypes.DateTime `json:"update_time" PointTimestampFrom:"UpdateTime" PointNameDateFormat:"2006/01/02 15:04:05"`
DeviceName interface{} `json:"device_name" PointTimestampFrom:"UpdateTime"`
UUID interface{} `json:"uuid" PointTimestampFrom:"UpdateTime"`
Co2Reduce valueTypes.Float `json:"co2_reduce" PointTimestampFrom:"UpdateTime"`

View File

@ -28,23 +28,23 @@ type ResultData struct {
ReportEmailConfigInfoList []struct {
Email valueTypes.String `json:"email"`
ReportList []struct {
CreateTime valueTypes.DateTime `json:"create_time"`
CreateTime valueTypes.DateTime `json:"create_time" PointNameDateFormat:"2006/01/02 15:04:05"`
CreateUserId valueTypes.Integer `json:"create_user_id"`
EmailAddTime valueTypes.DateTime `json:"email_add_time"`
EmailAddTime valueTypes.DateTime `json:"email_add_time" PointNameDateFormat:"2006/01/02 15:04:05"`
Id valueTypes.Integer `json:"id"`
IsAllowEmailSend valueTypes.Bool `json:"is_allow_email_send"`
IsBank valueTypes.Bool `json:"is_bank"`
IsCanRenewSendConfirmEmail valueTypes.Bool `json:"is_can_renew_send_confirm_email"`
IsNewWeb valueTypes.Bool `json:"is_new_web"`
OrderId valueTypes.Integer `json:"order_id"`
ReSendConfirmEmailTime valueTypes.DateTime `json:"re_send_confirm_email_time"`
ReSendConfirmEmailTime valueTypes.DateTime `json:"re_send_confirm_email_time" PointNameDateFormat:"2006/01/02 15:04:05"`
ReportId valueTypes.Integer `json:"report_id"`
ReportName valueTypes.String `json:"report_name"`
SendEmail valueTypes.String `json:"send_email"`
Status valueTypes.Bool `json:"status"`
TimeDimension valueTypes.Integer `json:"time_dimension"`
Type valueTypes.Integer `json:"type"`
UpdateTime valueTypes.DateTime `json:"update_time"`
UpdateTime valueTypes.DateTime `json:"update_time" PointNameDateFormat:"2006/01/02 15:04:05"`
UserId valueTypes.Integer `json:"user_id"`
} `json:"report_list" DataTable:"true"`
} `json:"report_email_config_info_list"`

View File

@ -27,10 +27,10 @@ type ResultData []struct {
GoStructParent GoStruct.GoStructParent `json:"-" DataTable:"true" DataTableSortOn:"CreateTime" PointIdReplace:"false"`
MsgId valueTypes.Integer `json:"msg_id"`
CreateTime valueTypes.DateTime `json:"create_time"`
PublishTime valueTypes.DateTime `json:"publish_time"`
StartTime valueTypes.DateTime `json:"start_time"`
EndTime valueTypes.DateTime `json:"end_time"`
CreateTime valueTypes.DateTime `json:"create_time" PointNameDateFormat:"2006/01/02 15:04:05"`
PublishTime valueTypes.DateTime `json:"publish_time" PointNameDateFormat:"2006/01/02 15:04:05"`
StartTime valueTypes.DateTime `json:"start_time" PointNameDateFormat:"2006/01/02 15:04:05"`
EndTime valueTypes.DateTime `json:"end_time" PointNameDateFormat:"2006/01/02 15:04:05"`
Ispublish valueTypes.Bool `json:"ispublish" PointId:"is_publish"`
UserName valueTypes.String `json:"user_name"`
UserId valueTypes.Integer `json:"user_id"`

View File

@ -28,7 +28,7 @@ type ResultData struct {
PageList []struct {
TemplateId valueTypes.Integer `json:"template_id"`
TemplateName valueTypes.String `json:"template_name"`
UpdateTime valueTypes.DateTime `json:"update_time"`
UpdateTime valueTypes.DateTime `json:"update_time" PointNameDateFormat:"2006/01/02 15:04:05"`
} `json:"pageList" PointId:"page_list" PointIdFromChild:"TemplateId" PointIdReplace:"true" DataTable:"true"`
RowCount valueTypes.Integer `json:"rowCount" PointId:"row_count"`
}

View File

@ -64,15 +64,15 @@ type ResultData struct {
Isdst valueTypes.Bool `json:"isdst"`
Jobs interface{} `json:"jobs"`
Language string `json:"language"`
LoginFirstDate valueTypes.DateTime `json:"loginFirstDate"`
LoginFirstDate2 valueTypes.DateTime `json:"loginFristDate"`
LoginLastDate valueTypes.DateTime `json:"loginLastDate"`
LoginFirstDate valueTypes.DateTime `json:"loginFirstDate" PointNameDateFormat:"2006/01/02 15:04:05"`
LoginFirstDate2 valueTypes.DateTime `json:"loginFristDate" PointNameDateFormat:"2006/01/02 15:04:05"`
LoginLastDate valueTypes.DateTime `json:"loginLastDate" PointNameDateFormat:"2006/01/02 15:04:05"`
LoginLastIP string `json:"loginLastIp"`
LoginTimes valueTypes.Integer `json:"loginTimes"`
Logo interface{} `json:"logo"`
LogoHTTPSURL interface{} `json:"logo_https_url"`
MapType string `json:"map_type"`
MinDate valueTypes.DateTime `json:"min_date"`
MinDate valueTypes.DateTime `json:"min_date" PointNameDateFormat:"2006/01/02 15:04:05"`
MobileTel interface{} `json:"mobile_tel"`
OrgId string `json:"org_id"`
OrgName string `json:"org_name"`

View File

@ -26,7 +26,7 @@ func (rd RequestData) Help() string {
type ResultData struct {
CurrentPage valueTypes.Integer `json:"currentPage" PointIgnore:"true"`
PageDataList []struct {
CreateTime valueTypes.DateTime `json:"create_time" PointIgnore:"true"`
CreateTime valueTypes.DateTime `json:"create_time" PointIgnore:"true" PointNameDateFormat:"2006/01/02 15:04:05"`
DeviceType valueTypes.Integer `json:"device_type"`
Id valueTypes.Integer `json:"id"`
Period valueTypes.Integer `json:"period"` // 0, 1, 2, 3, 4

View File

@ -32,7 +32,7 @@ type ResultData struct {
City valueTypes.String `json:"city"`
Code valueTypes.Integer `json:"code"`
CodeName valueTypes.String `json:"code_name"`
DateTime valueTypes.DateTime `json:"date_time" PointIgnore:"true"`
DateTime valueTypes.DateTime `json:"date_time" PointIgnore:"true" PointNameDateFormat:"2006/01/02 15:04:05"`
Direction valueTypes.Float `json:"direction"`
High valueTypes.Float `json:"high" PointUnit:"F"`
Highc valueTypes.Float `json:"highc" PointUnit:"C"`

View File

@ -147,7 +147,7 @@ type PointStruct struct {
GoStruct GoStruct.GoStruct `json:"-" PointIdFrom:"PointId" PointIdReplace:"true" PointTimestampFrom:"TimeStamp" PointDeviceFromParent:"PsKey"`
// GoStruct GoStruct.GoStruct `json:"-" PointDeviceFromParent:"PsKey"`
TimeStamp valueTypes.DateTime `json:"time_stamp" PointUpdateFreq:"UpdateFreq5Mins"`
TimeStamp valueTypes.DateTime `json:"time_stamp" PointUpdateFreq:"UpdateFreq5Mins" PointNameDateFormat:"2006/01/02 15:04:05"`
PointId valueTypes.PointId `json:"point_id" PointUpdateFreq:"UpdateFreqBoot"`
PointGroupName valueTypes.String `json:"point_group_name" PointUpdateFreq:"UpdateFreqBoot"`
PointName valueTypes.String `json:"point_name" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
@ -159,7 +159,7 @@ type PointStruct struct {
CodeId valueTypes.Integer `json:"code_id" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
CodeIdOrderId valueTypes.String `json:"code_id_order_id" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
CodeName valueTypes.String `json:"code_name" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
DevPointLastUpdateTime valueTypes.DateTime `json:"dev_point_last_update_time" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreq5Mins"`
DevPointLastUpdateTime valueTypes.DateTime `json:"dev_point_last_update_time" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreq5Mins" PointNameDateFormat:"2006/01/02 15:04:05"`
IsPlatformDefaultUnit valueTypes.Bool `json:"is_platform_default_unit" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
IsShow valueTypes.Bool `json:"is_show" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
OrderId valueTypes.Integer `json:"order_id" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`

View File

@ -38,7 +38,7 @@ type ResultData struct {
DevStatus valueTypes.Bool `json:"dev_status"`
DeviceArea valueTypes.String `json:"device_area"`
DeviceCode valueTypes.Integer `json:"device_code"`
DeviceFactoryDate valueTypes.DateTime `json:"device_factory_date"`
DeviceFactoryDate valueTypes.DateTime `json:"device_factory_date" PointNameDateFormat:"2006/01/02 15:04:05"`
DeviceId valueTypes.Integer `json:"device_id"`
DeviceModel valueTypes.String `json:"device_model"`
DeviceModelCode valueTypes.String `json:"device_model_code"`

View File

@ -29,10 +29,10 @@ type ResultData struct {
FileName valueTypes.String `json:"file_name"`
FileSize valueTypes.Integer `json:"file_size"`
FileType valueTypes.Integer `json:"file_type"`
UploadTime valueTypes.DateTime `json:"upload_time"`
UploadTime valueTypes.DateTime `json:"upload_time" PointNameDateFormat:"2006/01/02 15:04:05"`
URL valueTypes.String `json:"url"`
Operation valueTypes.Integer `json:"operation"`
OperationTime valueTypes.DateTime `json:"operation_time"`
OperationTime valueTypes.DateTime `json:"operation_time" PointNameDateFormat:"2006/01/02 15:04:05"`
OperatorId valueTypes.String `json:"operator_id"`
OperatorName valueTypes.String `json:"operator_name"`
System valueTypes.String `json:"system"`

View File

@ -3,25 +3,23 @@ package queryMutiPointDataList
import (
"GoSungrow/iSolarCloud/api"
"GoSungrow/iSolarCloud/api/GoStruct"
"GoSungrow/iSolarCloud/api/GoStruct/output"
"GoSungrow/iSolarCloud/api/GoStruct/valueTypes"
"github.com/MickMake/GoUnify/Only"
"encoding/json"
"fmt"
"sort"
)
const Url = "/v1/commonService/queryMutiPointDataList"
const Disabled = false
type RequestData struct {
PsId valueTypes.PsId `json:"ps_id" required:"true"`
PsKey valueTypes.PsKey `json:"ps_key" required:"true"`
Points valueTypes.String `json:"points" required:"true"`
MinuteInterval valueTypes.Integer `json:"minute_interval" required:"true"`
StartTimeStamp valueTypes.String `json:"start_time_stamp" required:"true"`
EndTimeStamp valueTypes.String `json:"end_time_stamp" required:"true"`
PsKeys valueTypes.PsKey `json:"ps_key" required:"true"`
PsId valueTypes.PsId `json:"ps_id" required:"true"`
Points valueTypes.PointIds `json:"points" required:"true"`
MinuteInterval valueTypes.Integer `json:"minute_interval" required:"true"`
StartTimeStamp valueTypes.String `json:"start_time_stamp" required:"true"`
EndTimeStamp valueTypes.String `json:"end_time_stamp" required:"true"`
}
func (rd RequestData) IsValid() error {
@ -33,57 +31,22 @@ func (rd RequestData) Help() string {
return ret
}
type ResultData struct {
Devices Devices `json:"devices"`
Data Data `json:"data" DataTable:"true" DataTableSortOn:"Timestamp"`
}
func (e *ResultData) UnmarshalJSON(data []byte) error {
var err error
type Data map[valueTypes.DateTime]Value
type Value struct {
GoStructParent GoStruct.GoStructParent `json:"-" PointIdFrom:"PsKey.Timestamp" PointIdReplace:"true"`
// GoStruct GoStruct.GoStruct `json:"-" PointIdFrom:"PsKey" PointIdReplace:"false" PointDeviceFrom:"PsKey"`
for range Only.Once {
if len(data) == 0 {
break
}
d := make(dDevices)
// Store DeviceData.Points.
err = json.Unmarshal(data, &d)
if err != nil {
break
}
e.Devices = make(Devices)
for deviceName, deviceRef := range d {
points := Points{}
for pointName, pointRef := range deviceRef {
times := Times{}
for time, value := range pointRef {
times = append(times, Time{
Key: valueTypes.NewDateTime(time),
Value: value,
})
}
sort.Slice(times, func(i, j int) bool {
return times[i].Key.Before(times[j].Key.Time)
})
points[valueTypes.SetPointIdString(pointName)] = Point{
Name: valueTypes.SetStringValue(""),
Units: valueTypes.SetStringValue(""),
Times: times,
}
}
e.Devices[deviceName] = Device{
Points: points,
}
}
}
return err
Timestamp valueTypes.DateTime `json:"timestamp" PointNameDateFormat:"2006/01/02 15:04:05"`
PsKey valueTypes.PsKey `json:"ps_key"`
Points map[string]valueTypes.Generic `json:"points" PointDeviceFrom:"PsKey"`
}
func (e *ResultData) IsValid() error {
var err error
return err
@ -138,99 +101,204 @@ func (e *ResultData) String() string {
return ret
}
type Devices map[string]Device
type Device struct {
Points Points `json:"points"`
}
type Points map[valueTypes.PointId]Point
type Point struct {
Name valueTypes.String `json:"name"`
Units valueTypes.String `json:"units"`
Times Times `json:"times"`
}
type Times []Time
type Time struct {
Key valueTypes.DateTime `json:"key"`
Value string `json:"value"`
}
type dDevices map[string]dPoints
type dPoints map[string]dTimes
type dTimes map[string]string
type DecodeResultData ResultData
func (e *EndPoint) GetPointDataTable(points api.TemplatePoints) output.Table {
var table output.Table
func (e *ResultData) UnmarshalJSON(data []byte) error {
var err error
for range Only.Once {
table = output.NewTable(
"Date/Time",
"Point Id",
"Point Name",
"Value",
"Units",
)
table.SetTitle("")
table.SetJson([]byte(e.GetJsonData(false)))
table.SetRaw([]byte(e.GetJsonData(true)))
// e.Error = table.SetHeader(
// "Date/Time",
// "Point Id",
// "Point Name",
// "Value",
// "Units",
// )
if e.Error != nil {
if len(data) == 0 {
break
}
t := e.Request.RequestData.StartTimeStamp
e.SetFilenamePrefix(t.String())
table.SetFilePrefix(t.String())
type scan scanDevices
d := make(scan, 0)
err = json.Unmarshal(data, &d)
if err != nil {
break
}
for deviceName, deviceRef := range e.Response.ResultData.Devices {
for pointId, pointRef := range deviceRef.Points {
for _, tim := range pointRef.Times {
gp := points.GetPoint(deviceName, pointId)
_ = table.AddRow(tim.Key.PrintFull(),
fmt.Sprintf("%s.%s", deviceName, pointId),
gp.Name,
tim.Value,
gp.Unit,
)
if table.Error != nil {
e.Data = make(Data, 0)
for device := range d {
for point := range d[device] {
for value := range d[device][point] {
d[device][point][value].PointId = valueTypes.SetPointIdString(point)
ts := d[device][point][value].Timestamp
if _, ok := e.Data[ts]; !ok {
rdv := Value {
Timestamp: ts,
PsKey: valueTypes.SetPsKeyString(device),
Points: make(map[string]valueTypes.Generic),
}
rdv.Points[point] = d[device][point][value].Value
e.Data[ts] = rdv
continue
}
e.Data[ts].Points[point] = d[device][point][value].Value
}
}
}
table.InitGraph(output.GraphRequest {
Title: "",
TimeColumn: output.SetString("Date/Time"),
SearchColumn: output.SetString("Point Id"),
NameColumn: output.SetString("Point Name"),
ValueColumn: output.SetString("Value"),
UnitsColumn: output.SetString("Units"),
SearchString: output.SetString(""),
MinLeftAxis: output.SetFloat(0),
MaxLeftAxis: output.SetFloat(0),
})
}
return table
return err
}
// Scan incoming JSON.
type scanDevices map[string]scanPoints
func (e *scanDevices) UnmarshalJSON(data []byte) error {
var err error
for range Only.Once {
if len(data) == 0 {
break
}
type scan scanDevices
d := make(scan, 0)
err = json.Unmarshal(data, &d)
if err != nil {
break
}
*e = scanDevices(d)
}
return err
}
type scanPoints map[string]scanValues
func (e *scanPoints) UnmarshalJSON(data []byte) error {
var err error
for range Only.Once {
if len(data) == 0 {
break
}
type scan scanPoints
d := make(scan, 0)
err = json.Unmarshal(data, &d)
if err != nil {
break
}
for point := range d {
for value := range d[point] {
d[point][value].PointId = valueTypes.SetPointIdString(point)
}
}
*e = scanPoints(d)
}
return err
}
type scanValues []scanValue
func (e *scanValues) UnmarshalJSON(data []byte) error {
var err error
for range Only.Once {
if len(data) == 0 {
break
}
type scan map[string]string
d := make(scan, 0)
err = json.Unmarshal(data, &d)
if err != nil {
break
}
*e = make(scanValues, 0)
for k, v := range d {
*e = append(*e, scanValue {
Timestamp: valueTypes.SetDateTimeString(k),
// PointId: valueTypes.SetPointIdString(v),
Value: valueTypes.SetGenericString(v),
})
}
}
return err
}
type scanValue struct {
Timestamp valueTypes.DateTime `json:"timestamp"`
PointId valueTypes.PointId `json:"point_id"`
Value valueTypes.Generic `json:"value"`
}
// func (e *EndPoint) GetPointDataTable(points api.TemplatePoints) output.Table {
// var table output.Table
//
// // for range Only.Once {
// // table = output.NewTable(
// // "Date/Time",
// // "Point Id",
// // "Point Name",
// // "Value",
// // "Units",
// // )
// // table.SetTitle("")
// // table.SetJson([]byte(e.GetJsonData(false)))
// // table.SetRaw([]byte(e.GetJsonData(true)))
// //
// // // e.Error = table.SetHeader(
// // // "Date/Time",
// // // "Point Id",
// // // "Point Name",
// // // "Value",
// // // "Units",
// // // )
// // if e.Error != nil {
// // break
// // }
// //
// // t := e.Request.RequestData.StartTimeStamp
// // e.SetFilenamePrefix(t.String())
// // table.SetFilePrefix(t.String())
// //
// // for deviceName, deviceRef := range e.Response.ResultData.Devices {
// // for pointId, pointRef := range deviceRef.Points {
// // for _, tim := range pointRef.Times {
// // gp := points.GetPoint(deviceName, pointId)
// // _ = table.AddRow(tim.Key.PrintFull(),
// // fmt.Sprintf("%s.%s", deviceName, pointId),
// // gp.Name,
// // tim.Value,
// // gp.Unit,
// // )
// // if table.Error != nil {
// // continue
// // }
// // }
// // }
// // }
// //
// // table.InitGraph(output.GraphRequest {
// // Title: "",
// // TimeColumn: output.SetString("Date/Time"),
// // SearchColumn: output.SetString("Point Id"),
// // NameColumn: output.SetString("Point Name"),
// // ValueColumn: output.SetString("Value"),
// // UnitsColumn: output.SetString("Units"),
// // SearchString: output.SetString(""),
// // MinLeftAxis: output.SetFloat(0),
// // MaxLeftAxis: output.SetFloat(0),
// // })
// //
// // }
//
// return table
// }
func (e *EndPoint) GetData() api.DataMap {
entries := api.NewDataMap()
for range Only.Once {
entries.StructToDataMap(*e, e.Request.PsId.String(), GoStruct.NewEndPointPath(e.Request.PsId.String()))
}
// entries.StructToDataMap(*e, e.Request.PsId.String(), GoStruct.NewEndPointPath(e.Request.PsId.String()))
entries.StructToDataMap(*e, e.Request.PsId.String(), GoStruct.EndPointPath{})
return entries
}

View File

@ -55,14 +55,14 @@ type ResultData struct {
DivisionCode valueTypes.String `json:"division_code"`
Email valueTypes.String `json:"email"`
EnergyScheme interface{} `json:"energy_scheme"`
ExpectInstallDate valueTypes.DateTime `json:"expect_install_date"`
ExpectInstallDate valueTypes.DateTime `json:"expect_install_date" PointNameDateFormat:"2006/01/02 15:04:05"`
GcjLatitude valueTypes.Float `json:"gcj_latitude"`
GcjLongitude valueTypes.Float `json:"gcj_longitude"`
GprsLatitude valueTypes.Float `json:"gprs_latitude"`
GprsLongitude valueTypes.Float `json:"gprs_longitude"`
GridLevel interface{} `json:"grid_level"`
InstallDate valueTypes.DateTime `json:"install_date"`
InstallDateZone valueTypes.DateTime `json:"install_date_zone"`
InstallDate valueTypes.DateTime `json:"install_date" PointNameDateFormat:"2006/01/02 15:04:05"`
InstallDateZone valueTypes.DateTime `json:"install_date_zone" PointNameDateFormat:"2006/01/02 15:04:05"`
InverterCount valueTypes.Integer `json:"inverter_count"`
InvestmentType valueTypes.Integer `json:"investment_type"`
InvestmentTypeDesc valueTypes.String `json:"investment_type_desc"`
@ -92,7 +92,7 @@ type ResultData struct {
ParamIncomeUnitName valueTypes.String `json:"param_income_unit_name"`
ProvinceCode valueTypes.String `json:"province_code"`
ProvinceName valueTypes.String `json:"province_name"`
PsBuildDate valueTypes.DateTime `json:"ps_build_date"`
PsBuildDate valueTypes.DateTime `json:"ps_build_date" PointNameDateFormat:"2006/01/02 15:04:05"`
PsCountryId valueTypes.Integer `json:"ps_country_id"`
PsCreateUserId valueTypes.Integer `json:"ps_create_user_id"`
PsCurrentTimeZone valueTypes.String `json:"ps_current_time_zone"`
@ -108,8 +108,8 @@ type ResultData struct {
PsTypeDesc valueTypes.String `json:"ps_type_desc"`
PsTypeName valueTypes.String `json:"ps_type_name"`
PsUserId valueTypes.Integer `json:"ps_user_id"`
RecordCreateTime valueTypes.DateTime `json:"recore_create_time" PointId:"record_create_time"`
SafeStartDate valueTypes.DateTime `json:"safe_start_date"`
RecordCreateTime valueTypes.DateTime `json:"recore_create_time" PointId:"record_create_time" PointNameDateFormat:"2006/01/02 15:04:05"`
SafeStartDate valueTypes.DateTime `json:"safe_start_date" PointNameDateFormat:"2006/01/02 15:04:05"`
SetUserOrg valueTypes.Integer `json:"set_user_org"`
ShareType valueTypes.Integer `json:"share_type"`
ShareUserType interface{} `json:"share_user_type"`

View File

@ -33,7 +33,7 @@ type ResultData struct {
CuspNetPowerQuantity interface{} `json:"cusp_net_power_quantity"`
CuspPowerQuantity interface{} `json:"cusp_power_quantity"`
CuspUsePowerQuantity interface{} `json:"cusp_use_power_quantity"`
DateId valueTypes.DateTime `json:"date_id"`
DateId valueTypes.DateTime `json:"date_id" PointNameDateFormat:"2006/01/02 15:04:05"`
FlatNetPowerQuantity valueTypes.Float `json:"flat_net_power_quantity"`
FlatPowerQuantity valueTypes.Float `json:"flat_power_quantity"`
FlatUsePowerQuantity valueTypes.Float `json:"flat_use_power_quantity"`
@ -45,7 +45,7 @@ type ResultData struct {
PowerQuantityTotal valueTypes.Float `json:"power_quantity_total"`
SubsidyProfit interface{} `json:"subsidy_profit"`
TotalProfit valueTypes.Float `json:"total_profit"`
UpdateTime valueTypes.DateTime `json:"update_time"`
UpdateTime valueTypes.DateTime `json:"update_time" PointNameDateFormat:"2006/01/02 15:04:05"`
UsePowerByDiscountProfit valueTypes.Float `json:"use_power_by_discount_profit"`
UsePowerProfit valueTypes.Float `json:"use_power_profit"`
UsePowerQuantityTotal valueTypes.Float `json:"use_power_quantity_total"`

View File

@ -38,7 +38,7 @@ type DataList struct {
DateId valueTypes.DateTime `json:"date_id" PointTimestampFrom:"UpdateTime" PointNameDateFormat:"20060102"`
PsId valueTypes.PsId `json:"ps_id" PointTimestampFrom:"UpdateTime"`
TimeStamp valueTypes.Generic `json:"time_stamp" PointTimestampFrom:"UpdateTime"` // Sad that this alternates between string and valueTypes.Integer.
UpdateTime valueTypes.DateTime `json:"update_time" PointTimestampFrom:"UpdateTime"`
UpdateTime valueTypes.DateTime `json:"update_time" PointTimestampFrom:"UpdateTime" PointNameDateFormat:"2006/01/02 15:04:05"`
DeviceName interface{} `json:"device_name" PointTimestampFrom:"UpdateTime"`
UUID interface{} `json:"uuid" PointTimestampFrom:"UpdateTime"`
Co2Reduce valueTypes.Float `json:"co2_reduce" PointTimestampFrom:"UpdateTime"`

View File

@ -32,7 +32,7 @@ type ResultData []struct {
ArrearsStatus valueTypes.Integer `json:"arrears_status"`
DesignCapacity valueTypes.Float `json:"design_capacity" PointUnitFrom:"DesignCapacityUnit"`
DesignCapacityUnit valueTypes.String `json:"design_capacity_unit" PointIgnore:"true"`
InstallDate valueTypes.DateTime `json:"install_date"`
InstallDate valueTypes.DateTime `json:"install_date" PointNameDateFormat:"2006/01/02 15:04:05"`
PsCode valueTypes.String `json:"ps_code"`
PsCountryID valueTypes.Integer `json:"ps_country_id"`
PsLocation valueTypes.String `json:"ps_location"`

View File

@ -35,7 +35,7 @@ type ResultData []struct {
PsStatus valueTypes.Integer `json:"ps_status"`
PsType valueTypes.Integer `json:"ps_type"`
State valueTypes.Bool `json:"state"`
UpdateTime valueTypes.DateTime `json:"update_time"`
UpdateTime valueTypes.DateTime `json:"update_time" PointNameDateFormat:"2006/01/02 15:04:05"`
PsFaultStatus valueTypes.Integer `json:"ps_fault_status"`
ArrearsStatus valueTypes.Integer `json:"arrears_status"`
@ -44,7 +44,7 @@ type ResultData []struct {
Value valueTypes.Float `json:"value" PointUnitFrom:"Unit"`
} `json:"design_capacity"`
DesignCapacityOriginal valueTypes.Float `json:"design_capacity_original"`
DeviceStatusUpdateTime valueTypes.DateTime `json:"device_status_update_time"`
DeviceStatusUpdateTime valueTypes.DateTime `json:"device_status_update_time" PointNameDateFormat:"2006/01/02 15:04:05"`
EquivalentHour valueTypes.Integer `json:"equivalent_hour"`
GcjLatitude valueTypes.Float `json:"gcj_latitude"`
GcjLongitude valueTypes.Float `json:"gcj_longitude"`

View File

@ -27,7 +27,7 @@ func (rd RequestData) Help() string {
type ResultData []struct {
GoStructParent GoStruct.GoStructParent `json:"GoStruct" DataTable:"true" DataTableSortOn:"CreateTime"`
CreateTime valueTypes.DateTime `json:"create_time"`
CreateTime valueTypes.DateTime `json:"create_time" PointNameDateFormat:"2006/01/02 15:04:05"`
Cycle valueTypes.Integer `json:"cycle"`
ID valueTypes.Integer `json:"id"`
MonthDate valueTypes.String `json:"month_date"`
@ -35,7 +35,7 @@ type ResultData []struct {
ReportName valueTypes.String `json:"report_name"`
ReportType valueTypes.Integer `json:"report_type"`
Status valueTypes.Bool `json:"status"`
UpdateTime valueTypes.DateTime `json:"update_time"`
UpdateTime valueTypes.DateTime `json:"update_time" PointNameDateFormat:"2006/01/02 15:04:05"`
}
func (e *ResultData) IsValid() error {

View File

@ -36,11 +36,11 @@ func (rd RequestData) Help() string {
// ResultData -> PointsData -> []dDevices -> []Points
type ResultData struct {
CreateTime valueTypes.DateTime `json:"create_time"`
OpenTime valueTypes.DateTime `json:"open_time"`
UpdateTime valueTypes.DateTime `json:"update_time"`
StartTime valueTypes.DateTime `json:"start_time"`
EndTime valueTypes.DateTime `json:"end_time"`
CreateTime valueTypes.DateTime `json:"create_time" PointNameDateFormat:"2006/01/02 15:04:05"`
OpenTime valueTypes.DateTime `json:"open_time" PointNameDateFormat:"2006/01/02 15:04:05"`
UpdateTime valueTypes.DateTime `json:"update_time" PointNameDateFormat:"2006/01/02 15:04:05"`
StartTime valueTypes.DateTime `json:"start_time" PointNameDateFormat:"2006/01/02 15:04:05"`
EndTime valueTypes.DateTime `json:"end_time" PointNameDateFormat:"2006/01/02 15:04:05"`
DateType valueTypes.Integer `json:"date_type"`
Cycle valueTypes.Integer `json:"cycle"`
TemplateId valueTypes.Integer `json:"template_id"`

View File

@ -39,7 +39,7 @@ type ResultData struct {
Remark valueTypes.String `json:"remark"`
SysId valueTypes.String `json:"sys_id"`
SysType valueTypes.String `json:"sys_type"`
UpdateDate valueTypes.DateTime `json:"updatedate" PointId:"update_date"`
UpdateDate valueTypes.DateTime `json:"updatedate" PointId:"update_date" PointNameDateFormat:"2006/01/02 15:04:05"`
UpdateUserCode valueTypes.Bool `json:"updateusercode" PointId:"update_user_code"`
}

View File

@ -26,7 +26,7 @@ func (rd RequestData) Help() string {
type ResultData []struct {
GoStructParent GoStruct.GoStructParent `json:"-" DataTable:"true" DataTableSortOn:"DeploymentTime"`
DeploymentTime valueTypes.DateTime `json:"deploymentTime" PointId:"deployment_time"`
DeploymentTime valueTypes.DateTime `json:"deploymentTime" PointId:"deployment_time" PointNameDateFormat:"2006/01/02 15:04:05"`
Id valueTypes.String `json:"id"`
Name valueTypes.String `json:"name"`
}

View File

@ -70,7 +70,7 @@ type ResultData struct {
Phone valueTypes.String `json:"phone"`
Protocol valueTypes.String `json:"protocol"`
Remark valueTypes.String `json:"remark"`
UpdateDate valueTypes.DateTime `json:"updatedate" PointId:"update_date"`
UpdateDate valueTypes.DateTime `json:"updatedate" PointId:"update_date" PointNameDateFormat:"2006/01/02 15:04:05"`
UpdateUserCode valueTypes.Bool `json:"updateusercode" PointId:"update_user_code"`
} `json:"powerDeviceModel"`
SysTypeList []struct {
@ -100,7 +100,7 @@ type ResultData struct {
SysId valueTypes.String `json:"sys_id"`
SysName valueTypes.String `json:"sys_name"`
IsRemoteUpgrade valueTypes.Bool `json:"is_remote_upgrade"`
UpdateDate valueTypes.DateTime `json:"update_date"`
UpdateDate valueTypes.DateTime `json:"update_date" PointNameDateFormat:"2006/01/02 15:04:05"`
ValidFlag valueTypes.Bool `json:"valid_flag"`
} `json:"deviceTypeList" PointId:"device_type_list" DataTable:"true" DataTableSortOn:"TypeId"`
}

View File

@ -36,12 +36,12 @@ type ResultData struct {
TechCode valueTypes.String `json:"tech_code"`
TechContent valueTypes.String `json:"tech_content"`
TechContentTransId valueTypes.Integer `json:"tech_content_trans_id"`
TechCreateTime valueTypes.DateTime `json:"tech_createtime" PointId:"tech_create_time"`
TechCreateTime valueTypes.DateTime `json:"tech_createtime" PointId:"tech_create_time" PointNameDateFormat:"2006/01/02 15:04:05"`
TechCreator valueTypes.String `json:"tech_creator"`
TechDescription interface{} `json:"tech_description"`
TechId valueTypes.Integer `json:"tech_id"`
TechModifier interface{} `json:"tech_modifier"`
TechModifyTime valueTypes.DateTime `json:"tech_modifytime" PointId:"tech_modify_time"`
TechModifyTime valueTypes.DateTime `json:"tech_modifytime" PointId:"tech_modify_time" PointNameDateFormat:"2006/01/02 15:04:05"`
TechName valueTypes.String `json:"tech_name"`
TypeId valueTypes.Integer `json:"type_id"`
TypeName valueTypes.String `json:"type_name"`

View File

@ -26,7 +26,7 @@ func (rd RequestData) Help() string {
type ResultData struct {
PowerDeviceTypeMap struct {
UpdateDate valueTypes.DateTime `json:"update_date"`
UpdateDate valueTypes.DateTime `json:"update_date" PointNameDateFormat:"2006/01/02 15:04:05"`
SysId valueTypes.String `json:"sys_id"`
SysName valueTypes.String `json:"sys_name"`
TypeCode valueTypes.Integer `json:"type_code"`

View File

@ -12,7 +12,7 @@ const Url = "/v1/faultService/getGroupManSettings"
const Disabled = false
type RequestData struct {
}
}
func (rd RequestData) IsValid() error {
return GoStruct.VerifyOptionsRequired(rd)

View File

@ -55,7 +55,7 @@ type ResultData []struct {
RegisteredAddress valueTypes.String `json:"registered_address"`
RegisteredArea valueTypes.String `json:"registered_area"`
RegisteredCapital valueTypes.Integer `json:"registered_capital"`
RegisteredDate valueTypes.DateTime `json:"registered_date"`
RegisteredDate valueTypes.DateTime `json:"registered_date" PointNameDateFormat:"2006/01/02 15:04:05"`
ServiceEmail valueTypes.String `json:"service_emaill" PointId:"service_email"`
TaxCertificate valueTypes.String `json:"tax_certificate"`
TelNo valueTypes.String `json:"tel_no"`

View File

@ -38,7 +38,7 @@ type ResultData struct {
PsGUID valueTypes.String `json:"psGuid" PointId:"ps_guid"`
SnCode interface{} `json:"snCode" PointId:"sn_code"`
SyncDate interface{} `json:"syncDate" PointId:"sync_date"`
UpdateDate valueTypes.DateTime `json:"updateDate" PointId:"update_date"`
UpdateDate valueTypes.DateTime `json:"updateDate" PointId:"update_date" PointNameDateFormat:"2006/01/02 15:04:05"`
UpdateUserCode interface{} `json:"updateUserCode" PointId:"update_user_code"`
}

View File

@ -27,7 +27,7 @@ func (rd RequestData) Help() string {
type ResultData []struct {
GoStructParent GoStruct.GoStructParent `json:"GoStruct" PointIdReplace:"true" DataTable:"true" DataTableSortOn:"UpdateDate"`
UpdateDate valueTypes.DateTime `json:"update_date"`
UpdateDate valueTypes.DateTime `json:"update_date" PointNameDateFormat:"2006/01/02 15:04:05"`
SysId valueTypes.String `json:"sys_id"`
SysName valueTypes.String `json:"sys_name"`
TypeId valueTypes.Integer `json:"type_id"`

View File

@ -81,7 +81,7 @@ type ResultData struct {
AccessType Common.Unknown `json:"access_type"`
AreaType Common.Unknown `json:"area_type"`
AreaId Common.Unknown `json:"areaid" PointId:"area_id"`
BuildDate valueTypes.DateTime `json:"build_date"`
BuildDate valueTypes.DateTime `json:"build_date" PointNameDateFormat:"2006/01/02 15:04:05"`
BuildStatus valueTypes.Integer `json:"buildstatus" PointId:"build_status"`
CapitalType valueTypes.Integer `json:"capitaltype" PointId:"capital_type"`
City Common.Unknown `json:"city"`
@ -90,13 +90,13 @@ type ResultData struct {
DistrictFlag valueTypes.Integer `json:"district_flag"`
DivisionCode Common.Unknown `json:"division_code"`
Email valueTypes.String `json:"email"`
ExpectInstallDate valueTypes.DateTime `json:"expect_install_date"`
ExpectInstallDate valueTypes.DateTime `json:"expect_install_date" PointNameDateFormat:"2006/01/02 15:04:05"`
FaultSendType Common.Unknown `json:"fault_send_type"`
GcjLatitude valueTypes.Float `json:"gcj_latitude"`
GcjLongitude valueTypes.Float `json:"gcj_longitude"`
GprsLatitude valueTypes.Float `json:"gprs_latitude"`
GprsLongitude valueTypes.Float `json:"gprs_longitude"`
InstallDate valueTypes.DateTime `json:"installdate"`
InstallDate valueTypes.DateTime `json:"installdate" PointNameDateFormat:"2006/01/02 15:04:05"`
InvestmentType valueTypes.Integer `json:"investment_type"`
Latitude valueTypes.Float `json:"latitude"`
Longitude valueTypes.Float `json:"longitude"`
@ -118,7 +118,7 @@ type ResultData struct {
Producer Common.Unknown `json:"producer"`
Prov Common.Unknown `json:"prov"`
ProvCode Common.Unknown `json:"prov_code"`
PsBuildDate valueTypes.DateTime `json:"ps_build_date"`
PsBuildDate valueTypes.DateTime `json:"ps_build_date" PointNameDateFormat:"2006/01/02 15:04:05"`
PsCountryId valueTypes.Integer `json:"ps_country_id"`
PsCode valueTypes.String `json:"pscode" PointId:"ps_code"`
PsDesc Common.Unknown `json:"psdesc" PointId:"ps_desc"`
@ -129,7 +129,7 @@ type ResultData struct {
PsNameEnus Common.Unknown `json:"psnameenus" PointId:"ps_name_enus"`
PsOrgId Common.Unknown `json:"psorgid" PointId:"ps_org_id"`
PsOrgName Common.Unknown `json:"psorgname" PointId:"ps_org_name"`
SafeStartDate valueTypes.DateTime `json:"safe_start_date"`
SafeStartDate valueTypes.DateTime `json:"safe_start_date" PointNameDateFormat:"2006/01/02 15:04:05"`
SchedulingType valueTypes.Integer `json:"schedulingtype" PointId:"scheduling_type"`
Shortname valueTypes.String `json:"shortname"`
Sn valueTypes.String `json:"sn"`
@ -153,7 +153,7 @@ type ResultData struct {
ChannelDesc Common.Unknown `json:"chnnl_desc" PointId:"channel_description"`
ChannelId valueTypes.Integer `json:"chnnl_id" PointId:"channel_id"`
ChannelName valueTypes.String `json:"chnnl_name" PointId:"channel_name"`
CrtDate valueTypes.DateTime `json:"crt_date" PointId:"create_date"`
CrtDate valueTypes.DateTime `json:"crt_date" PointId:"create_date" PointNameDateFormat:"2006/01/02 15:04:05"`
CrtUserName Common.Unknown `json:"crt_user_name" PointId:"create_username"`
DataFlag valueTypes.Integer `json:"data_flag"`
FlagServer Common.Unknown `json:"flag_server"`

View File

@ -15,6 +15,8 @@ const (
TypeRaw = iota
TypeGraph = iota
TypeStruct = iota
TypeXML = iota
TypeXLSX = iota
StringTypeNone = ""
StringTypeJson = "json"
@ -24,6 +26,8 @@ const (
StringTypeRaw = "raw"
StringTypeGraph = "graph"
StringTypeStruct = "struct"
StringTypeXML = "xml"
StringTypeXLSX = "xlsx"
)
//goland:noinspection GoNameStartsWithPackageName
@ -54,6 +58,12 @@ func (out *OutputType) SetGraph() {
func (out *OutputType) SetStruct() {
*out = TypeStruct
}
func (out *OutputType) SetXML() {
*out = TypeXML
}
func (out *OutputType) SetXLSX() {
*out = TypeXLSX
}
func (out *OutputType) IsNone() bool {
@ -104,6 +114,18 @@ func (out *OutputType) IsStruct() bool {
}
return false
}
func (out *OutputType) IsXML() bool {
if *out == TypeXML {
return true
}
return false
}
func (out *OutputType) IsXLSX() bool {
if *out == TypeXLSX {
return true
}
return false
}
func (out *OutputType) IsStrNone(t string) bool {
@ -148,8 +170,14 @@ func (out *OutputType) IsStrGraph(t string) bool {
}
return false
}
func (out *OutputType) IsStrStruct(t string) bool {
if t == StringTypeStruct {
func (out *OutputType) IsStrXML(t string) bool {
if t == StringTypeXML {
return true
}
return false
}
func (out *OutputType) IsStrXLSX(t string) bool {
if t == StringTypeXLSX {
return true
}
return false
@ -178,6 +206,10 @@ func (out *OutputType) Set(outputType string) {
out.SetGraph()
case StringTypeStruct:
out.SetStruct()
case StringTypeXML:
out.SetXML()
case StringTypeXLSX:
out.SetXLSX()
case StringTypeList:
fallthrough
default:

View File

@ -15,10 +15,6 @@ import (
// "github.com/jbub/tabular"
// type DataSet []DataRow
// type DataRow map[string]string
type Tables map[string]Table
func NewTables() Tables {
@ -167,10 +163,6 @@ func (t *Table) writeFile(data string, perm os.FileMode) error {
return t.Error
}
// func (t *Table) AllRows() []*tabular.Row {
// return t.table.AllRows()
// }
func (t *Table) SetTitle(title string, args ...interface{}) {
t.title = fmt.Sprintf(title, args...)
}
@ -245,7 +237,6 @@ func (t *Table) GetName() string {
return t.name
}
func (t *Table) Output() error {
for range Only.Once {
if t == nil {
@ -264,6 +255,12 @@ func (t *Table) Output() error {
case t.OutputType.IsCsv():
t.Error = t.WriteCsv()
case t.OutputType.IsXML():
t.Error = t.WriteXml()
case t.OutputType.IsXLSX():
t.Error = t.WriteXLSX()
case t.OutputType.IsRaw():
t.Error = t.WriteRaw()
@ -290,6 +287,7 @@ func (t *Table) Output() error {
return t.Error
}
func (t *Table) GetTable() string {
return t.String()
}
@ -301,7 +299,7 @@ func (t *Table) WriteTable() error {
}
if t.saveAsFile {
t.filePrefix += "-table.txt"
t.filePrefix += "." + StringTypeTable
t.Error = t.writeFile(t.String(), DefaultFileMode)
break
}
@ -318,7 +316,7 @@ func (t *Table) WriteList() error {
}
if t.saveAsFile {
t.filePrefix += "-list.txt"
t.filePrefix += "." + StringTypeList
t.Error = t.writeFile(t.String(), DefaultFileMode)
break
}
@ -353,7 +351,7 @@ func (t *Table) WriteCsv() error {
}
if t.saveAsFile {
t.filePrefix += ".csv"
t.filePrefix += "." + StringTypeCsv
t.Error = t.writeFile(t.GetCsv(), DefaultFileMode)
break
}
@ -371,7 +369,7 @@ func (t *Table) GetXml() string {
}
var result *tabular.Exportable
result, t.Error = t.table.CSV()
result, t.Error = t.table.XML()
if t.Error != nil {
break
}
@ -387,7 +385,7 @@ func (t *Table) WriteXml() error {
}
if t.saveAsFile {
t.filePrefix += ".xml"
t.filePrefix += "." + StringTypeXML
t.Error = t.writeFile(t.GetXml(), DefaultFileMode)
break
}
@ -397,6 +395,40 @@ func (t *Table) WriteXml() error {
}
func (t *Table) GetXLSX() string {
var ret string
for range Only.Once {
if t.IsNotValid() {
break
}
var result *tabular.Exportable
result, t.Error = t.table.XLSX()
if t.Error != nil {
break
}
ret = result.String()
}
return ret
}
func (t *Table) WriteXLSX() error {
for range Only.Once {
if t.IsNotValid() {
break
}
// if t.saveAsFile {
t.filePrefix += "." + StringTypeXLSX
t.Error = t.writeFile(t.GetXLSX(), DefaultFileMode)
// break
// }
// fmt.Print(t.GetXml())
}
return t.Error
}
func (t *Table) GetJson() string {
return string(t.raw)
}
@ -408,7 +440,7 @@ func (t *Table) WriteJson() error {
}
if t.saveAsFile {
t.filePrefix += ".json"
t.filePrefix += "." + StringTypeJson
t.Error = t.writeFile(string(t.json), DefaultFileMode)
break
}
@ -433,7 +465,7 @@ func (t *Table) WriteRaw() error {
// }
if t.saveAsFile {
t.filePrefix += ".raw"
t.filePrefix += "." + StringTypeRaw
t.Error = t.writeFile(string(t.raw), DefaultFileMode)
break
}

View File

@ -740,6 +740,10 @@ func (r *Reflect) SetByIndex(parent *Reflect, current *Reflect, index int, index
}
r.Valid = true
switch current.TypeOf.Kind() {
case reflect.Struct:
r.FieldTo = current.TypeOf.Field(index)
@ -823,9 +827,15 @@ func (r *Reflect) SetByIndex(parent *Reflect, current *Reflect, index int, index
}
r.IsExported = true
r.FieldVo = current.ValueOf.MapIndex(indexName)
r.FieldName = current.FieldName + ":" + indexName.String() // mk[index].String()
name := valueTypes.AnyToValueString(indexName.Interface(), valueTypes.IgnoreLength, "") // map key could be anything.
r.FieldName = name // current.FieldName + ":" + indexName.String()
r.FieldPath = r.CurrentReflect.FieldPath.Copy()
r.FieldPath.Append("[" + indexName.String() + "]")
r.FieldPath.Append("[" + name + "]") // indexName.String()
current.ChildReflect = append(current.ChildReflect, r)
current.ChildReflectMap[r.FieldName] = r
@ -844,8 +854,8 @@ func (r *Reflect) SetByIndex(parent *Reflect, current *Reflect, index int, index
}
}
r.SetGoStructOptions(1)
r.DataStructure.Json = indexName.String() // current.ValueOf.MapIndex(indexName).String() || r.FieldVo.String()
r.DataStructure.PointId = indexName.String() // current.ValueOf.MapIndex(indexName).String() || r.FieldVo.String()
r.DataStructure.Json = name // indexName.String() // current.ValueOf.MapIndex(indexName).String() || r.FieldVo.String()
r.DataStructure.PointId = name // indexName.String() // current.ValueOf.MapIndex(indexName).String() || r.FieldVo.String()
r.DataStructure.UpdateTags(parent, current)
// Value
@ -951,6 +961,9 @@ func (r *Reflect) SetPointId() EndPointPath {
// fmt.Printf("EPP(BEFORE): %s\n", r.DataStructure.Endpoint.String())
// fmt.Printf("[ ] EPP: %s - FP: %s\n", r.DataStructure.Endpoint, r.FieldPath)
var pn string
if strings.Contains(r.EndPointPath().String(), "Points") || strings.Contains(r.DataStructure.Endpoint.String(), "values") {
fmt.Printf("")
}
switch {
case r.DataStructure.PointIdFromChild != "":

View File

@ -152,14 +152,14 @@ func (sm *StructMap) ScanMap(Parent *Reflect, Current *Reflect) bool {
Child.SetByIndex(Parent, Current, index, key)
sm.PrintDebug("# ScanMap().SetByIndex() Child: %s\n", Child)
if strings.Contains(Child.FieldPath.String(), "DevTypeDefinition") {
for index2, key2 := range Child.FieldVo.MapKeys() {
var Child2 Reflect
Child2.SetByIndex(Current, &Child, index2, key2)
sm.Add(&Child2)
}
fmt.Println("")
}
// if strings.Contains(Child.FieldPath.String(), "DevTypeDefinition") {
// for index2, key2 := range Child.FieldVo.MapKeys() {
// var Child2 Reflect
// Child2.SetByIndex(Current, &Child, index2, key2)
// sm.Add(&Child2)
// }
// fmt.Println("")
// }
if sm.Process(&Child) {
continue
@ -191,14 +191,14 @@ func (sm *StructMap) ScanSlice(Parent *Reflect, Current *Reflect) bool {
Child.SetByIndex(Parent, Current, index, reflect.Value{})
sm.PrintDebug("# ScanSlice().SetByIndex() Child: %s\n", Child)
if strings.Contains(Child.FieldPath.String(), "DevTypeDefinition") {
for index2, key2 := range Child.FieldVo.MapKeys() {
var Child2 Reflect
Child2.SetByIndex(Current, &Child, index2, key2)
sm.Add(&Child2)
}
fmt.Println("")
}
// if strings.Contains(Child.FieldPath.String(), "DevTypeDefinition") {
// for index2, key2 := range Child.FieldVo.MapKeys() {
// var Child2 Reflect
// Child2.SetByIndex(Current, &Child, index2, key2)
// sm.Add(&Child2)
// }
// fmt.Println("")
// }
if sm.Process(&Child) {
continue
@ -230,14 +230,14 @@ func (sm *StructMap) ScanStruct(Parent *Reflect, Current *Reflect) bool {
Child.SetByIndex(Parent, Current, index, reflect.Value{})
sm.PrintDebug("# ScanStruct().SetByIndex() Child: %s\n", Child)
if strings.Contains(Child.FieldPath.String(), "DevTypeDefinition") {
for index2, key2 := range Child.FieldVo.MapKeys() {
var Child2 Reflect
Child2.SetByIndex(Current, &Child, index2, key2)
sm.Add(&Child2)
}
fmt.Println("")
}
// if strings.Contains(Child.FieldPath.String(), "DevTypeDefinition") {
// for index2, key2 := range Child.FieldVo.MapKeys() {
// var Child2 Reflect
// Child2.SetByIndex(Current, &Child, index2, key2)
// sm.Add(&Child2)
// }
// fmt.Println("")
// }
if sm.Process(&Child) {
continue
@ -859,6 +859,10 @@ func (sm *StructMap) GetTableData(name string) StructTable {
refs = refs.AddRow(Child)
}
if refs == nil {
break
}
if !isPivot {
ret.Reflects = refs
// ret.AddHeader(ret.Reflects[0]...)
@ -1108,7 +1112,7 @@ func (ta *StructTable) GetValues() StructValues {
// addCol(name)
// }
//
// cm[name] = sub.Range(valueTypes.LoadOrder)
// cm[name] = sub.Range(valueTypes.SortOrder)
// l := sub.Value.Length()
// if l > length {
// length = l
@ -1135,7 +1139,7 @@ func (ta *StructTable) GetValues() StructValues {
// ta.Columns = sortMapByValues(colOrder)
// cm := make(map[string][]valueTypes.UnitValue)
// cm[ta.Current.DataStructure.PointName] = ta.Current.Value.Range(valueTypes.LoadOrder)
// cm[ta.Current.DataStructure.PointName] = ta.Current.Value.Range(valueTypes.SortOrder)
// length := ta.Current.Value.Length()
// addCol("Key")
// addCol("Value")
@ -1180,10 +1184,10 @@ func (ta *StructTable) GetValues() StructValues {
} else {
// addCol(name)
// addCol("Units")
// cm[name] = sub.Value.Range(valueTypes.LoadOrder)
// cm[name] = sub.Value.Range(valueTypes.SortOrder)
}
cm[name] = sub.Value.Range(valueTypes.LoadOrder)
cm[name] = sub.Value.Range(valueTypes.SortOrder)
l := sub.Value.Length()
if l > length {
length = l
@ -1251,7 +1255,7 @@ func (ta *StructTable) GetValues() StructValues {
if len(col.ChildReflect) > 0 {
// Handles
for _, sub := range col.ChildReflect {
for _, val := range sub.Value.Range(valueTypes.LoadOrder) {
for _, val := range sub.Value.Range(valueTypes.SortOrder) {
name := colName(sub, &val, len(data))
data[name] = val
addCol(name)
@ -1263,7 +1267,7 @@ func (ta *StructTable) GetValues() StructValues {
if col.IsKnown() {
value := ta.Reflects[rowIndex][colIndex].Value
// data = append(data, value.Range(valueTypes.SortOrder)...)
for _, val := range value.Range(valueTypes.LoadOrder) {
for _, val := range value.Range(valueTypes.SortOrder) {
name := colName(col, &val, len(data))
data[name] = val
addCol(name)
@ -1279,7 +1283,7 @@ func (ta *StructTable) GetValues() StructValues {
col.DataStructure.PointValueType, dateFormat)
// data = append(data, value.Range(valueTypes.SortOrder)...)
for _, val := range value.Range(valueTypes.LoadOrder) {
for _, val := range value.Range(valueTypes.SortOrder) {
name := colName(col, &val, len(data))
data[name] = val
addCol(name)

View File

@ -2,6 +2,7 @@ package valueTypes
import (
"encoding/json"
"fmt"
"github.com/MickMake/GoUnify/Only"
"regexp"
"strconv"
@ -78,7 +79,12 @@ func (t *PsKey) Value() string {
}
func (t PsKey) String() string {
return t.string
// PsKey can only handle one. So strip the others out.
a := strings.Split(t.string, ",")
if len(a) == 0 {
return t.string
}
return a[0]
}
func (t *PsKey) Match(comp string) bool {
@ -101,11 +107,11 @@ func (t *PsKey) SetValue(value string) PsKey {
s := strings.Split(value, "_")
switch {
case len(s) == 1:
t.psId = s[0]
case len(s) >= 2:
t.psId = s[0]
t.deviceType = s[1]
case len(s) == 1:
t.psId = s[0]
case len(s) >= 2:
t.psId = s[0]
t.deviceType = s[1]
}
}
@ -120,7 +126,7 @@ func (t *PsKey) GetPsId() string {
return t.psId
}
func SetPsKeyValue(value string) PsKey {
func SetPsKeyString(value string) PsKey {
var t PsKey
return t.SetValue(value)
}
@ -287,13 +293,12 @@ func (t *PsIds) Strings() []string {
type PointId struct {
string `json:"string,omitempty"`
int64 `json:"integer,omitempty"`
isInt bool
// string `json:"string,omitempty"`
// int64 `json:"integer,omitempty"`
// isInt bool
// PointName String `json:"point_name"`
// PsId String `json:"ps_id"`
// PsKey String `json:"ps_key"`
Point string `json:"point"`
PsKey PsKey `json:"ps_key"`
Valid bool `json:"valid"`
Error error `json:"-"`
@ -308,21 +313,14 @@ func (t *PointId) UnmarshalJSON(data []byte) error {
break
}
// Store result from int
t.Error = json.Unmarshal(data, &t.int64)
if t.Error == nil {
t.SetValue(t.int64)
// pid := strings.TrimPrefix(string(data), "p")
var d string
t.Error = json.Unmarshal(data, &d)
if t.Error != nil {
break
}
// Store result from string
t.Error = json.Unmarshal(data, &t.string)
if t.Error == nil {
t.SetString(t.string)
break
}
t.SetString(string(data))
t.Set(d)
}
return t.Error
@ -333,39 +331,38 @@ func (t PointId) MarshalJSON() ([]byte, error) {
var data []byte
for range Only.Once {
if t.isInt {
data, t.Error = json.Marshal(t.int64)
t.Error = nil
if t.PsKey.String() != "" {
d := fmt.Sprintf(`"%s.%s"`, t.PsKey.String(), t.Point)
data = []byte(d)
break
}
data, t.Error = json.Marshal(t.string)
data = []byte(t.Point)
}
return data, t.Error
}
func (t PointId) Value() int64 {
return t.int64
}
func (t PointId) String() string {
if t.isInt {
return "p" + t.string
}
return t.string
return t.Point
}
func (t PointId) Match(comp int64) bool {
if t.int64 == comp {
return true
}
return false
}
func (t *PointId) SetString(value string) PointId {
func (t *PointId) Full() string {
var ret string
for range Only.Once {
t.string = value
t.int64 = 0
if t.PsKey.String() != "" {
ret = fmt.Sprintf(`"%s.%s"`, t.PsKey.String(), t.Point)
break
}
ret = t.Point
}
return ret
}
func (t *PointId) Set(value string) PointId {
for range Only.Once {
t.PsKey = PsKey{}
t.Point = ""
t.Valid = false
if value == "" {
@ -376,45 +373,48 @@ func (t *PointId) SetString(value string) PointId {
// value = ""
break
}
t.Valid = true
var v int
v, t.Error = strconv.Atoi(t.string)
if t.Error != nil {
break
}
t.int64 = int64(v)
t.isInt = true
}
return *t
}
func (t *PointId) SetValue(value int64) PointId {
for range Only.Once {
t.string = ""
t.int64 = value
t.Valid = true
t.isInt = true
t.string = strconv.FormatInt(t.int64, 10)
}
return *t
}
func (t *PointId) Fix() PointId {
for range Only.Once {
p := strings.TrimPrefix(t.string, "p")
_, t.Error = strconv.ParseInt(p, 10, 64)
if t.Error != nil {
t.Valid = false
break
a := strings.Split(value, ".")
switch {
case len(a) == 0:
case len(a) == 1:
t.Point = a[0]
t.Valid = true
case len(a) >= 2:
t.PsKey.SetValue(a[0])
t.Point = a[1]
t.Valid = true
}
}
return *t
}
// func (t *PointId) SetValue(value int64) PointId {
// for range Only.Once {
// t.string = ""
// t.int64 = value
// t.Valid = true
// t.isInt = true
// t.string = strconv.FormatInt(t.int64, 10)
// }
//
// return *t
// }
// func (t *PointId) Fix() PointId {
// for range Only.Once {
// p := strings.TrimPrefix(t.string, "p")
// _, t.Error = strconv.ParseInt(p, 10, 64)
// if t.Error != nil {
// t.Valid = false
// break
// }
// }
// return *t
// }
func (t *PointId) PointToName() string {
return PointToName(t.String())
}
@ -459,10 +459,147 @@ func PointToName(ret string) string {
func SetPointIdString(value string) PointId {
var t PointId
return t.SetString(value)
return t.Set(value)
}
func SetPointIdValue(value int64) PointId {
var t PointId
return t.SetValue(value)
// func SetPointIdValue(value int64) PointId {
// var t PointId
// return t.SetValue(value)
// }
type PsKeys struct {
PsKeys []PsKey `json:"ps_keys,omitempty"`
Valid bool `json:"valid"`
Error error `json:"-"`
}
// UnmarshalJSON - Convert JSON to value
func (t *PsKeys) UnmarshalJSON(data []byte) error {
for range Only.Once {
t.Valid = false
if len(data) == 0 {
break
}
var pid string
t.Error = json.Unmarshal(data, &pid)
if t.Error != nil {
break
}
t.Set(strings.Split(pid, ",")...)
t.Valid = true
}
return t.Error
}
// MarshalJSON - Convert value to JSON
func (t PsKeys) MarshalJSON() ([]byte, error) {
var a []string
for _, pid := range t.PsKeys {
a = append(a, pid.String())
}
ret := `"` + strings.Join(a, ",") + `"`
return []byte(ret), nil
}
func (t PsKeys) String() string {
var ret string
for index := range t.PsKeys {
ret += t.PsKeys[index].String() + ","
}
ret = strings.TrimSuffix(ret, ",")
return ret
}
func (t *PsKeys) Set(values ...string) PsKeys {
for _, value := range values {
for _, v := range strings.Split(value, ",") {
var pid PsKey
pid.SetValue(v)
t.PsKeys = append(t.PsKeys, pid)
}
}
return *t
}
func SetPsKeysString(values string) PsKeys {
var t PsKeys
t.Set(strings.Split(values, ",")...)
return t
}
type PointIds struct {
PointIds []PointId `json:"points,omitempty"`
Valid bool `json:"valid"`
Error error `json:"-"`
}
// UnmarshalJSON - Convert JSON to value
func (t *PointIds) UnmarshalJSON(data []byte) error {
for range Only.Once {
t.Valid = false
if len(data) == 0 {
break
}
var pid string
t.Error = json.Unmarshal(data, &pid)
if t.Error != nil {
break
}
t.Set(strings.Split(pid, ",")...)
t.Valid = true
}
return t.Error
}
// MarshalJSON - Convert value to JSON
func (t PointIds) MarshalJSON() ([]byte, error) {
var a []string
// Some endpoints can't handle the pskey, so we need to strip it out.
for _, pid := range t.PointIds {
a = append(a, pid.String())
}
ret := `"` + strings.Join(a, ",") + `"`
// Can't use this method as some endpoints can't handle the pskey.
// data, err := json.Marshal(t.PointIds)
return []byte(ret), nil
}
func (t PointIds) String() string {
var ret string
for index := range t.PointIds {
ret += t.PointIds[index].String() + ","
}
ret = strings.TrimSuffix(ret, ",")
return ret
}
func (t *PointIds) Set(values ...string) PointIds {
for _, value := range values {
for _, v := range strings.Split(value, ",") {
var pid PointId
pid.Set(v)
t.PointIds = append(t.PointIds, pid)
}
}
return *t
}
func SetPointIdsString(values string) PointIds {
var t PointIds
t.Set(strings.Split(values, ",")...)
return t
}

View File

@ -472,12 +472,12 @@ func AnyToUnitValue(ref interface{}, key string, unit string, typeString string,
case TypeGeneric:
v := ref.(Generic)
uvs.AddFloat(key, unit, typeString, v.Value())
uvs.AddString(key, unit, typeString, v.String())
case TypeArrayGeneric:
v := ref.([]Generic)
for _, val := range v {
uvs.AddFloat(key, unit, typeString, val.Value())
uvs.AddString(key, unit, typeString, val.String())
}
default:

View File

@ -740,7 +740,13 @@ func CreatePointDataEntries(Current *GoStruct.Reflect, parentDeviceId string, po
sorted := Current.Value.Range(valueTypes.SortOrder)
res := valueTypes.SizeOfInt(sorted)
for i, uv := range sorted {
epn := JoinWithDots(res, valueTypes.DateTimeLayoutDay, Current.EndPointPath().String(), i)
var epn string
if uv.ValueKey() == "" {
epn = JoinWithDots(res, valueTypes.DateTimeLayoutDay, Current.EndPointPath().String(), i)
} else {
epn = JoinWithDots(res, valueTypes.DateTimeLayoutDay, Current.EndPointPath().String(), uv.ValueKey())
}
ret.Entries = append(ret.Entries, DataEntry{
Current: Current,
EndPoint: epn, // Current.EndPointPath().String(),

View File

@ -101,20 +101,57 @@ func (sgd *SunGrowDataResponse) GetOutput(outputType output.OutputType, saveAsFi
break
}
if !outputType.IsTable() {
if outputType.IsXLSX() {
table := sgd.Data.CreateResultTable(false)
table.OutputType = outputType
table.SetSaveFile(saveAsFile)
table.AppendFilePrefix(sgd.Filename)
table.SetTitle(table.GetName() + " - " + sgd.Title)
sgd.Error = table.Output()
break
}
table := sgd.Data.CreateResultTable(false)
table.OutputType = outputType
table.SetSaveFile(saveAsFile)
table.AppendFilePrefix(sgd.Filename)
table.SetTitle(table.GetName() + " - " + sgd.Title)
sgd.Error = table.Output()
if sgd.Error != nil {
break
if outputType.IsCsv() {
table := sgd.Data.CreateResultTable(false)
table.OutputType = outputType
table.SetSaveFile(saveAsFile)
table.AppendFilePrefix(sgd.Filename)
table.SetTitle(table.GetName() + " - " + sgd.Title)
sgd.Error = table.Output()
if sgd.Error != nil {
break
}
// break
}
if outputType.IsXML() {
table := sgd.Data.CreateResultTable(false)
table.OutputType = outputType
table.SetSaveFile(saveAsFile)
table.AppendFilePrefix(sgd.Filename)
table.SetTitle(table.GetName() + " - " + sgd.Title)
sgd.Error = table.Output()
if sgd.Error != nil {
break
}
// break
}
if outputType.IsTable() {
table := sgd.Data.CreateResultTable(false)
table.OutputType = outputType
table.SetSaveFile(saveAsFile)
table.AppendFilePrefix(sgd.Filename)
table.SetTitle(table.GetName() + " - " + sgd.Title)
sgd.Error = table.Output()
if sgd.Error != nil {
break
}
// break
}
tables := sgd.Data.CreateDataTables()
if len(tables) == 0 {
fmt.Printf("No data table results for '%s'\n", sgd.Title)
@ -235,7 +272,7 @@ func (sgd *SunGrowData) SetPsIds(psids ...string) {
}
}
func (sgd *SunGrowData) GetData() error {
func (sgd *SunGrowData) GetData(args ...string) error {
for range Only.Once {
if len(sgd.endPoints) == 0 {
sgd.Error = errors.New("need an endpoint")
@ -251,6 +288,8 @@ func (sgd *SunGrowData) GetData() error {
}
sgd.request.SetRequired(ep.GetRequestArgNames())
sgd.SetArgs(args...)
// PsId not required.
if sgd.request.IsPsIdNotRequired() {
var result SunGrowDataResult
@ -277,9 +316,6 @@ func (sgd *SunGrowData) GetData() error {
result.Request = sgd.request
result.Request.SetPsId(psId.String())
// result.Request.SetIfRequired(NamePsIds, psId.String())
// result.Request.SetIfRequired(NameDay, "")
// result.Request.SetIfRequired(NameDateId, "")
result.EndPointName = ep.GetName()
result.EndPoint = ep

View File

@ -38,7 +38,13 @@ type RequestArgs struct {
Uuid *valueTypes.String `json:"uuid,omitempty"`
TemplateId *valueTypes.String `json:"template_id,omitempty"`
DeviceModelId *valueTypes.String `json:"device_model_id,omitempty"`
PsKey *valueTypes.PsKey `json:"ps_key,omitempty"`
// Points
PsKeyList *valueTypes.String `json:"ps_key_list,omitempty"`
PsKeys *valueTypes.PsKeys `json:"-,omitempty"` // Used by queryMutiPointDataList
PsKey *valueTypes.PsKey `json:"ps_key,omitempty"`
Point *valueTypes.PointId `json:"point_id,omitempty"`
Points *valueTypes.PointIds `json:"points,omitempty"`
// DateTime
DateId *valueTypes.DateTime `json:"date_id,omitempty"`
@ -60,11 +66,8 @@ type RequestArgs struct {
MinuteInterval *valueTypes.Integer `json:"minute_interval,omitempty"`
OrderId *valueTypes.String `json:"order_id,omitempty"`
OrgId *valueTypes.String `json:"org_id,omitempty"`
PointId *valueTypes.PointId `json:"point_id,omitempty"`
Points *valueTypes.String `json:"points,omitempty"`
Prefix *valueTypes.String `json:"prefix,omitempty"`
PrimaryKey *valueTypes.String `json:"primaryKey,omitempty"`
PsKeyList *valueTypes.String `json:"ps_key_list,omitempty"`
QueryType *valueTypes.String `json:"query_type,omitempty"`
Sn *valueTypes.String `json:"sn,omitempty"`
Table *valueTypes.String `json:"table,omitempty"`
@ -120,7 +123,12 @@ const (
NameUuid = "Uuid"
NameTemplateId = "TemplateId"
NameDeviceModelId = "DeviceModelId"
NamePsKeyList = "PsKeyList"
NamePsKeys = "PsKeys"
NamePsKey = "PsKey"
NamePointId = "PointId"
NamePoints = "Points"
// DateTime
NameDateId = "DateId"
@ -142,11 +150,8 @@ const (
NameMinuteInterval = "MinuteInterval"
NameOrderId = "OrderId"
NameOrgId = "OrgId"
NamePointId = "PointId"
NamePoints = "Points"
NamePrefix = "Prefix"
NamePrimaryKey = "PrimaryKey"
NamePsKeyList = "PsKeyList"
NameQueryType = "QueryType"
NameSn = "Sn"
NameTable = "Table"
@ -172,7 +177,11 @@ var Help = map[string]string{
NameUuid: "Uuid - ",
NameTemplateId: "TemplateId - ",
NameDeviceModelId: "DeviceModelId - ",
NamePsKeyList: "PsKeyList - ",
NamePsKey: "PsKey - ",
NamePointId: "PointId - ",
NamePoints: "Points - ",
// DateTime
NameDateId: "DateId - Date in format YYYYMMDD or YYYYMM or YYYY",
@ -194,11 +203,8 @@ var Help = map[string]string{
NameMinuteInterval: "MinuteInterval - ",
NameOrderId: "OrderId - ",
NameOrgId: "OrgId - ",
NamePointId: "PointId - ",
NamePoints: "Points - ",
NamePrefix: "Prefix - ",
NamePrimaryKey: "PrimaryKey - ",
NamePsKeyList: "PsKeyList - ",
NameQueryType: "QueryType - ",
NameSn: "Sn - ",
NameTable: "Table - ",
@ -218,6 +224,14 @@ func (sgd SunGrowDataRequest) MarshalJSON() ([]byte, error) {
dt = &sgd.args.DateId.DateType
}
if sgd.IsRequired(NamePsKeys) {
// queryMutiPointDataList - expects multiple pskeys separated by comma.
// getDevicePointMinuteDataList - expects a single pskey.
pskey := valueTypes.SetPsKeyString(sgd.args.PsKeys.String())
sgd.args.PsKey = &pskey
sgd.args.PsKeys = nil
}
type Parse RequestArgs
// Store result from string
data, err = json.Marshal(Parse {
@ -237,7 +251,13 @@ func (sgd SunGrowDataRequest) MarshalJSON() ([]byte, error) {
Uuid: sgd.args.Uuid,
TemplateId: sgd.args.TemplateId,
DeviceModelId: sgd.args.DeviceModelId,
// Points
PsKeyList: sgd.args.PsKeyList,
PsKey: sgd.args.PsKey,
PsKeys: sgd.args.PsKeys,
Point: sgd.args.Point,
Points: sgd.args.Points,
// DateTime
DateId: sgd.args.DateId,
@ -259,11 +279,8 @@ func (sgd SunGrowDataRequest) MarshalJSON() ([]byte, error) {
MinuteInterval: sgd.args.MinuteInterval,
OrderId: sgd.args.OrderId,
OrgId: sgd.args.OrgId,
PointId: sgd.args.PointId,
Points: sgd.args.Points,
Prefix: sgd.args.Prefix,
PrimaryKey: sgd.args.PrimaryKey,
PsKeyList: sgd.args.PsKeyList,
QueryType: sgd.args.QueryType,
Sn: sgd.args.Sn,
Table: sgd.args.Table,
@ -316,8 +333,19 @@ func (sgd *SunGrowDataRequest) Set(arg string, value string) {
val := valueTypes.SetStringValue(value); sgd.args.TemplateId = &val
case NameDeviceModelId:
val := valueTypes.SetStringValue(value); sgd.args.DeviceModelId = &val
// Points
case NamePsKeyList:
val := valueTypes.SetStringValue(value); sgd.args.PsKeyList = &val
case NamePsKeys:
val := valueTypes.SetPsKeysString(value); sgd.args.PsKeys = &val
case NamePsKey:
val := valueTypes.SetPsKeyValue(value); sgd.args.PsKey = &val
val := valueTypes.SetPsKeyString(value); sgd.args.PsKey = &val
case NamePointId:
val := valueTypes.SetPointIdString(value); sgd.args.Point = &val
case NamePoints:
sgd.SetPoints(value)
// val := valueTypes.SetPointIdsString(value); sgd.args.Points = &val
// DateTime
case NameDateId:
@ -354,16 +382,10 @@ func (sgd *SunGrowDataRequest) Set(arg string, value string) {
val := valueTypes.SetStringValue(value); sgd.args.OrderId = &val
case NameOrgId:
val := valueTypes.SetStringValue(value); sgd.args.OrgId = &val
case NamePointId:
val := valueTypes.SetPointIdString(value); sgd.args.PointId = &val
case NamePoints:
val := valueTypes.SetStringValue(value); sgd.args.Points = &val
case NamePrefix:
val := valueTypes.SetStringValue(value); sgd.args.Prefix = &val
case NamePrimaryKey:
val := valueTypes.SetStringValue(value); sgd.args.PrimaryKey = &val
case NamePsKeyList:
val := valueTypes.SetStringValue(value); sgd.args.PsKeyList = &val
case NameQueryType:
val := valueTypes.SetStringValue(value); sgd.args.QueryType = &val
case NameSn:
@ -416,8 +438,18 @@ func (sgd *SunGrowDataRequest) Get(arg string) string {
value = sgd.args.TemplateId.String()
case NameDeviceModelId:
value = sgd.args.DeviceModelId.String()
// Points
case NamePsKeyList:
value = sgd.args.PsKeyList.String()
case NamePsKeys:
value = sgd.args.PsKeys.String()
case NamePsKey:
value = sgd.args.PsKey.String()
case NamePointId:
value = sgd.args.Point.String()
case NamePoints:
value = sgd.args.Points.String()
// DateTime
@ -455,16 +487,10 @@ func (sgd *SunGrowDataRequest) Get(arg string) string {
value = sgd.args.OrderId.String()
case NameOrgId:
value = sgd.args.OrgId.String()
case NamePointId:
value = sgd.args.PointId.String()
case NamePoints:
value = sgd.args.Points.String()
case NamePrefix:
value = sgd.args.Prefix.String()
case NamePrimaryKey:
value = sgd.args.PrimaryKey.String()
case NamePsKeyList:
value = sgd.args.PsKeyList.String()
case NameQueryType:
value = sgd.args.QueryType.String()
case NameSn:
@ -522,8 +548,19 @@ func (sgd *SunGrowDataRequest) IsSet(arg string) bool {
if sgd.args.TemplateId != nil { ok = true }
case NameDeviceModelId:
if sgd.args.DeviceModelId != nil { ok = true }
// Points
case NamePsKeyList:
if sgd.args.PsKeyList != nil { ok = true }
case NamePsKeys:
if sgd.args.PsKeys != nil { ok = true }
case NamePsKey:
if sgd.args.PsKey != nil { ok = true }
case NamePointId:
if sgd.args.Point != nil { ok = true }
case NamePoints:
if sgd.args.Points != nil { ok = true }
// UNVERIFIED
@ -553,16 +590,10 @@ func (sgd *SunGrowDataRequest) IsSet(arg string) bool {
if sgd.args.OrderId != nil { ok = true }
case NameOrgId:
if sgd.args.OrgId != nil { ok = true }
case NamePointId:
if sgd.args.PointId != nil { ok = true }
case NamePoints:
if sgd.args.Points != nil { ok = true }
case NamePrefix:
if sgd.args.Prefix != nil { ok = true }
case NamePrimaryKey:
if sgd.args.PrimaryKey != nil { ok = true }
case NamePsKeyList:
if sgd.args.PsKeyList != nil { ok = true }
case NameQueryType:
if sgd.args.QueryType != nil { ok = true }
case NameSn:
@ -890,6 +921,29 @@ func (sgd *SunGrowDataRequest) SetPsId(psId string) {
}
}
func (sgd *SunGrowDataRequest) SetPoints(points string) {
for range Only.Once {
pids := valueTypes.SetPointIdsString(points)
if pids.Error != nil {
fmt.Printf("Error: %s - %s\n", NamePsId, sgd.args.Points.Error)
break
}
var pskeys []string
for _, pskey := range pids.PointIds {
pskeys = append(pskeys, pskey.PsKey.String())
}
sgd.args.Points = &pids
psk := valueTypes.SetPsKeysString(strings.Join(pskeys, ","))
if sgd.IsRequired(NamePsKey) {
sgd.args.PsKey = &psk.PsKeys[0]
}
if sgd.IsRequired(NamePsKeys) {
sgd.args.PsKeys = &psk
}
}
}
func (sgd *SunGrowDataRequest) IsRequired(req string) bool {
var yes bool
if _, ok := sgd.Required[req]; ok {

View File

@ -1,7 +1,6 @@
package iSolarCloud
import (
"github.com/MickMake/GoUnify/Only"
"GoSungrow/iSolarCloud/AppService/getDeviceList"
"GoSungrow/iSolarCloud/AppService/getDeviceModelInfoList"
"GoSungrow/iSolarCloud/AppService/getHouseholdStoragePsReport"
@ -23,6 +22,7 @@ import (
"GoSungrow/iSolarCloud/api/GoStruct/valueTypes"
"errors"
"fmt"
"github.com/MickMake/GoUnify/Only"
"math"
"strings"
"time"
@ -94,14 +94,14 @@ func (sg *SunGrow) GetTemplateData(template string, date string, filter string)
break
}
pskeys := valueTypes.SetPsKeyValue(pointNames.PrintKeys())
pskeys := valueTypes.SetPsKeyString(pointNames.PrintKeys())
ep := sg.GetByStruct(
"AppService.queryMutiPointDataList",
queryMutiPointDataList.RequestData {
// PsId: api.SetIntegerValue(psId),
PsId: psId,
PsKey: pskeys,
Points: valueTypes.SetStringValue(pointNames.PrintPoints()), // @TODO - Fixup!
PsKeys: pskeys,
Points: valueTypes.SetPointIdsString(pointNames.PrintPoints()), // @TODO - Fixup!
MinuteInterval: valueTypes.SetIntegerValue(5),
StartTimeStamp: valueTypes.SetStringValue(when.GetDayStartTimestamp()), // @TODO - Fixup!
EndTimeStamp: valueTypes.SetStringValue(when.GetDayEndTimestamp()), // @TODO - Fixup!
@ -111,25 +111,28 @@ func (sg *SunGrow) GetTemplateData(template string, date string, filter string)
if sg.IsError() {
break
}
if ep == nil {
break
}
// data := queryMutiPointDataList.AssertResultData(ep)
data := queryMutiPointDataList.Assert(ep)
data.GetData()
table := data.GetPointDataTable(pointNames)
if table.Error != nil {
sg.Error = table.Error
break
}
table.SetTitle("Template %s on %s for %d", template, when.String(), psId)
table.SetFilePrefix(data.SetFilenamePrefix("%s-%s-%d", when.String(), template, psId))
table.SetGraphFilter(filter)
table.SetSaveFile(sg.SaveAsFile)
table.OutputType = sg.OutputType
sg.Error = table.Output()
if sg.IsError() {
break
}
// data := queryMutiPointDataList.Assert(ep)
// data.GetData()
// table := data.GetPointDataTable(pointNames)
// if table.Error != nil {
// sg.Error = table.Error
// break
// }
//
// table.SetTitle("Template %s on %s for %d", template, when.String(), psId)
// table.SetFilePrefix(data.SetFilenamePrefix("%s-%s-%d", when.String(), template, psId))
// table.SetGraphFilter(filter)
// table.SetSaveFile(sg.SaveAsFile)
// table.OutputType = sg.OutputType
// sg.Error = table.Output()
// if sg.IsError() {
// break
// }
}
}
@ -521,34 +524,37 @@ func (sg *SunGrow) GetPointData(date string, pointNames api.TemplatePoints, psId
"AppService.queryMutiPointDataList",
queryMutiPointDataList.RequestData{
PsId: psId,
PsKey: valueTypes.SetPsKeyValue(pointNames.PrintKeys()), // @TODO - Fixup!
Points: valueTypes.SetStringValue(pointNames.PrintPoints()), // @TODO - Fixup!
MinuteInterval: valueTypes.SetIntegerValue(5), // @TODO - Fixup!
StartTimeStamp: valueTypes.SetStringValue(when.GetDayStartTimestamp()), // @TODO - Fixup!
EndTimeStamp: valueTypes.SetStringValue(when.GetDayEndTimestamp()), // @TODO - Fixup!
PsKeys: valueTypes.SetPsKeyString(pointNames.PrintKeys()), // @TODO - Fixup!
Points: valueTypes.SetPointIdsString(pointNames.PrintPoints()), // @TODO - Fixup!
MinuteInterval: valueTypes.SetIntegerValue(5), // @TODO - Fixup!
StartTimeStamp: valueTypes.SetStringValue(when.GetDayStartTimestamp()), // @TODO - Fixup!
EndTimeStamp: valueTypes.SetStringValue(when.GetDayEndTimestamp()), // @TODO - Fixup!
},
DefaultCacheTimeout,
)
if sg.IsError() {
break
}
data := queryMutiPointDataList.Assert(ep)
table := data.GetPointDataTable(pointNames)
if table.Error != nil {
sg.Error = table.Error
if ep == nil {
break
}
table.SetTitle("Point Data %s", psId)
table.SetFilePrefix(data.SetFilenamePrefix("%d", psId))
table.SetGraphFilter("")
table.SetSaveFile(sg.SaveAsFile)
table.OutputType = sg.OutputType
sg.Error = table.Output()
if sg.IsError() {
break
}
// data := queryMutiPointDataList.Assert(ep)
// table := data.GetPointDataTable(pointNames)
// if table.Error != nil {
// sg.Error = table.Error
// break
// }
//
// table.SetTitle("Point Data %s", psId)
// table.SetFilePrefix(data.SetFilenamePrefix("%d", psId))
// table.SetGraphFilter("")
// table.SetSaveFile(sg.SaveAsFile)
// table.OutputType = sg.OutputType
// sg.Error = table.Output()
// if sg.IsError() {
// break
// }
}
}
@ -1072,7 +1078,7 @@ func (sg *SunGrow) GetDevices(print bool) (getDeviceList.Devices, error) {
ret = append(ret, getDeviceList.Device{
Vendor: valueTypes.SetStringValue(""),
PsId: psId.PsId,
PsKey: valueTypes.SetPsKeyValue(psId.PsId.String()),
PsKey: valueTypes.SetPsKeyString(psId.PsId.String()),
DeviceName: psId.PsName,
DeviceProSn: psId.PsShortName,
DeviceModel: valueTypes.SetStringValue(""),