#pragma once #include #include #include #include #include #include #include "common/Fields.h" #include "app/Config.h" class Station; class Device; class MyPolicy; using VecPairSS = std::vector>; struct User { std::string userId; std::string account; std::string token; int64_t loginTime {}; }; struct DeviceType { int typeId {}; std::string name; std::string group; std::string attr; Fields fieldsAttr; }; struct Role { int roleId {}; std::string name; bool isOpen {false}; }; class ElectPeriod { public: double priceSuperPeak {}; double pricePeak {}; double priceShoulder {}; double priceOffPeak {}; std::vector> vecPeriods; void parse(std::string jsonstr); std::string dump(); }; class AppData { public: void init(); void initFromDB(); // 读取统计数据: 今日统计数据,累计统计数据 void loadStatData(); std::string userLogin(std::string userId, std::string account); User getUser(std::string token); std::shared_ptr getStation(int stationId); std::shared_ptr getStationByName(std::string name); std::shared_ptr getDevice(int stationId, int deviceId); std::string getDeviceNameById(int typeId); // 获取设备类型定义 std::shared_ptr getDeviceTypeDef(int typeId); int getWorkModeIdByName(std::string name); /////////////////////////////////////////////////////////////////////////////////////////////// // 获取角色名称列表 std::vector getRoleNames(); // 获取场站名称列表 std::vector getStationNames(); // 获取设备类型 std::vector getDeviceTypeNames(); // 获取工作模式 std::vector getWorkModes(); // 获取策略类型定义 std::vector getPolicyTypeNames(); // 获取策略名称 std::vector getPolicyNames(); // 根据策略类型ID获取策略类型名称 // 根据策略类型名称获取策略类型ID int getPolicyTypeId(std::string name); std::vector getElectPreiodVals(int month); std::string getElectPreiodVal(int month, int hour); public: /////////////////////////////////////////////////////////////////////////////////////////////// // === 系统 === int64_t sysActivationTime {}; /////////////////////////////////////////////////////////////////////////////////////////////// // === 数据库 === struct { std::string host; int port; std::string user; std::string passwd; } db; struct { VecPairSS isopen {{"0", "禁用"}, {"1", "启用"}}; VecPairSS gender {{"0", "女"}, {"1", "男"}}; // 角色 Mapping (id->name) VecPairSS role; VecPairSS deviceType; VecPairSS workMode; VecPairSS policyType; VecPairSS stationName; } mapping; double electPriceSuperPeak {}; double electPricePeak {}; double electPriceShoulder {}; double electPriceOffPeak {}; // 场站信息 std::unordered_map> mapStation; // 角色信息 std::unordered_map> mapRole; // 设备类型定义 std::unordered_map> mapDeviceType; // 工作模式定义 std::unordered_map mapWorkMode; // 策略类型定义 std::unordered_map mapPolicyType; // 策略信息 std::unordered_map> mapPolicy; // 电力峰谷分段 (12个月,每个月按小时分成24个时段) std::vector> vecElectPeriods; };