fix for custom kpi and export log&cdr table file
This commit is contained in:
41
database/install/kpi_c_report.sql
Normal file
41
database/install/kpi_c_report.sql
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
Navicat Premium Data Transfer
|
||||||
|
|
||||||
|
Source Server : local_mariadb
|
||||||
|
Source Server Type : MariaDB
|
||||||
|
Source Server Version : 100338 (10.3.38-MariaDB)
|
||||||
|
Source Host : localhost:33066
|
||||||
|
Source Schema : tenants_db
|
||||||
|
|
||||||
|
Target Server Type : MariaDB
|
||||||
|
Target Server Version : 100338 (10.3.38-MariaDB)
|
||||||
|
File Encoding : 65001
|
||||||
|
|
||||||
|
Date: 29/08/2024 14:53:38
|
||||||
|
*/
|
||||||
|
|
||||||
|
SET NAMES utf8mb4;
|
||||||
|
SET FOREIGN_KEY_CHECKS = 0;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for kpi_c_report_upf
|
||||||
|
-- ----------------------------
|
||||||
|
DROP TABLE IF EXISTS `kpi_c_report`;
|
||||||
|
CREATE TABLE `kpi_c_report` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
|
||||||
|
`rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`date` date NOT NULL,
|
||||||
|
`start_time` time NULL DEFAULT NULL,
|
||||||
|
`end_time` time NULL DEFAULT NULL,
|
||||||
|
`index` smallint(6) NOT NULL,
|
||||||
|
`granularity` tinyint(4) NULL DEFAULT 60 COMMENT 'Time granualarity: 5/10/.../60/300 (second)',
|
||||||
|
`kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
|
||||||
|
`created_at` timestamp NULL DEFAULT current_timestamp(),
|
||||||
|
PRIMARY KEY (`id`) USING BTREE,
|
||||||
|
INDEX `idx_timestamp`(`created_at`) USING BTREE,
|
||||||
|
INDEX `idx_uid_datetime`(`rm_uid`, `date`, `start_time`) USING BTREE
|
||||||
|
) ENGINE = InnoDB AUTO_INCREMENT = 654904 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
|
SET FOREIGN_KEY_CHECKS = 1;
|
||||||
39
database/install/kpi_c_title.sql
Normal file
39
database/install/kpi_c_title.sql
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
Navicat Premium Data Transfer
|
||||||
|
|
||||||
|
Source Server : local_mariadb
|
||||||
|
Source Server Type : MariaDB
|
||||||
|
Source Server Version : 100338 (10.3.38-MariaDB)
|
||||||
|
Source Host : localhost:33066
|
||||||
|
Source Schema : omc_db
|
||||||
|
|
||||||
|
Target Server Type : MariaDB
|
||||||
|
Target Server Version : 100338 (10.3.38-MariaDB)
|
||||||
|
File Encoding : 65001
|
||||||
|
|
||||||
|
Date: 29/08/2024 17:21:06
|
||||||
|
*/
|
||||||
|
|
||||||
|
SET NAMES utf8mb4;
|
||||||
|
SET FOREIGN_KEY_CHECKS = 0;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for kpi_c_title
|
||||||
|
-- ----------------------------
|
||||||
|
DROP TABLE IF EXISTS `kpi_c_title`;
|
||||||
|
CREATE TABLE `kpi_c_title` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`kpi_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`expression` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`unit` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`status` enum('Active','Inactive','Deleted') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'Active' COMMENT 'enum:Active/Inactive/Deleted',
|
||||||
|
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`created_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`updated_at` datetime NULL DEFAULT current_timestamp(),
|
||||||
|
PRIMARY KEY (`id`) USING BTREE,
|
||||||
|
UNIQUE INDEX `idx_ne_kpi_id`(`ne_type`, `kpi_id`) USING BTREE
|
||||||
|
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
|
SET FOREIGN_KEY_CHECKS = 1;
|
||||||
40
database/upgrade/upg_kpi_c_report.sql
Normal file
40
database/upgrade/upg_kpi_c_report.sql
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
Navicat Premium Data Transfer
|
||||||
|
|
||||||
|
Source Server : local_mariadb
|
||||||
|
Source Server Type : MariaDB
|
||||||
|
Source Server Version : 100338 (10.3.38-MariaDB)
|
||||||
|
Source Host : localhost:33066
|
||||||
|
Source Schema : tenants_db
|
||||||
|
|
||||||
|
Target Server Type : MariaDB
|
||||||
|
Target Server Version : 100338 (10.3.38-MariaDB)
|
||||||
|
File Encoding : 65001
|
||||||
|
|
||||||
|
Date: 29/08/2024 14:53:38
|
||||||
|
*/
|
||||||
|
|
||||||
|
SET NAMES utf8mb4;
|
||||||
|
SET FOREIGN_KEY_CHECKS = 0;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for kpi_c_report_upf
|
||||||
|
-- ----------------------------
|
||||||
|
CREATE TABLE IF NOT EXISTS `kpi_c_report` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`ne_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
|
||||||
|
`rm_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`date` date NOT NULL,
|
||||||
|
`start_time` time NULL DEFAULT NULL,
|
||||||
|
`end_time` time NULL DEFAULT NULL,
|
||||||
|
`index` smallint(6) NOT NULL,
|
||||||
|
`granularity` tinyint(4) NULL DEFAULT 60 COMMENT 'Time granualarity: 5/10/.../60/300 (second)',
|
||||||
|
`kpi_values` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
|
||||||
|
`created_at` timestamp NULL DEFAULT current_timestamp(),
|
||||||
|
PRIMARY KEY (`id`) USING BTREE,
|
||||||
|
INDEX `idx_timestamp`(`created_at`) USING BTREE,
|
||||||
|
INDEX `idx_uid_datetime`(`rm_uid`, `date`, `start_time`) USING BTREE
|
||||||
|
) ENGINE = InnoDB AUTO_INCREMENT = 654904 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
|
SET FOREIGN_KEY_CHECKS = 1;
|
||||||
38
database/upgrade/upg_kpi_c_title.sql
Normal file
38
database/upgrade/upg_kpi_c_title.sql
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
Navicat Premium Data Transfer
|
||||||
|
|
||||||
|
Source Server : local_mariadb
|
||||||
|
Source Server Type : MariaDB
|
||||||
|
Source Server Version : 100338 (10.3.38-MariaDB)
|
||||||
|
Source Host : localhost:33066
|
||||||
|
Source Schema : omc_db
|
||||||
|
|
||||||
|
Target Server Type : MariaDB
|
||||||
|
Target Server Version : 100338 (10.3.38-MariaDB)
|
||||||
|
File Encoding : 65001
|
||||||
|
|
||||||
|
Date: 29/08/2024 17:21:06
|
||||||
|
*/
|
||||||
|
|
||||||
|
SET NAMES utf8mb4;
|
||||||
|
SET FOREIGN_KEY_CHECKS = 0;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for kpi_c_title
|
||||||
|
-- ----------------------------
|
||||||
|
CREATE TABLE IF NOT EXISTS `kpi_c_title` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`ne_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`kpi_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`expression` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`unit` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`status` enum('Active','Inactive','Deleted') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'Active' COMMENT 'enum:Active/Inactive/Deleted',
|
||||||
|
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`created_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`updated_at` datetime NULL DEFAULT current_timestamp(),
|
||||||
|
PRIMARY KEY (`id`) USING BTREE,
|
||||||
|
UNIQUE INDEX `idx_ne_kpi_id`(`ne_type`, `kpi_id`) USING BTREE
|
||||||
|
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
|
SET FOREIGN_KEY_CHECKS = 1;
|
||||||
@@ -5,8 +5,8 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"be.ems/lib/dborm"
|
||||||
"be.ems/lib/services"
|
"be.ems/lib/services"
|
||||||
"be.ems/src/framework/datasource"
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ func (k *KpiCReport) Get(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
tableName := TableName() + "_" + strings.ToLower(querys.NeType)
|
tableName := TableName() + "_" + strings.ToLower(querys.NeType)
|
||||||
dborm := datasource.DefaultDB().Table(tableName)
|
dbg := dborm.DefaultDB().Table(tableName)
|
||||||
|
|
||||||
if querys.NeID != "" {
|
if querys.NeID != "" {
|
||||||
conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=? and n.status=1)")
|
conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=? and n.status=1)")
|
||||||
@@ -51,30 +51,29 @@ func (k *KpiCReport) Get(c *gin.Context) {
|
|||||||
whereSql := ""
|
whereSql := ""
|
||||||
if len(conditions) > 0 {
|
if len(conditions) > 0 {
|
||||||
whereSql += strings.Join(conditions, " and ")
|
whereSql += strings.Join(conditions, " and ")
|
||||||
dborm = dborm.Where(whereSql, params...)
|
dbg = dbg.Where(whereSql, params...)
|
||||||
}
|
}
|
||||||
// page number and size
|
// page number and size
|
||||||
if pageSize := querys.PageSize; pageSize > 0 {
|
if pageSize := querys.PageSize; pageSize > 0 {
|
||||||
dborm = dborm.Limit(pageSize)
|
dbg = dbg.Limit(pageSize)
|
||||||
if pageNum := querys.PageNum; pageNum > 0 {
|
if pageNum := querys.PageNum; pageNum > 0 {
|
||||||
dborm = dborm.Offset((pageNum - 1) * pageSize)
|
dbg = dbg.Offset((pageNum - 1) * pageSize)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// order by
|
// order by
|
||||||
if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" {
|
if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" {
|
||||||
orderBy := fmt.Sprintf("%s %s", sortField, sortOrder)
|
orderBy := fmt.Sprintf("%s %s", sortField, sortOrder)
|
||||||
dborm = dborm.Order(orderBy)
|
dbg = dbg.Order(orderBy)
|
||||||
}
|
}
|
||||||
|
|
||||||
//err := datasource.DefaultDB().Table(tableName).Where(whereSql, params...).Find(&reports).Error
|
//err := dborm.DefaultDB().Table(tableName).Where(whereSql, params...).Find(&reports).Error
|
||||||
err := dborm.Find(&reports).Error
|
err := dbg.Find(&reports).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.JSON(http.StatusOK, services.DataResp(reports))
|
c.JSON(http.StatusOK, services.DataResp(reports))
|
||||||
//c.JSON(http.StatusOK, reports)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k *KpiCReport) GetReport2FE(c *gin.Context) {
|
func (k *KpiCReport) GetReport2FE(c *gin.Context) {
|
||||||
@@ -97,7 +96,7 @@ func (k *KpiCReport) GetReport2FE(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
tableName := TableName() + "_" + strings.ToLower(querys.NeType)
|
tableName := TableName() + "_" + strings.ToLower(querys.NeType)
|
||||||
dborm := datasource.DefaultDB().Table(tableName)
|
dbg := dborm.DefaultDB().Table(tableName)
|
||||||
|
|
||||||
if querys.NeID != "" {
|
if querys.NeID != "" {
|
||||||
conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=? and n.status=1)")
|
conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=? and n.status=1)")
|
||||||
@@ -118,24 +117,24 @@ func (k *KpiCReport) GetReport2FE(c *gin.Context) {
|
|||||||
whereSql := ""
|
whereSql := ""
|
||||||
if len(conditions) > 0 {
|
if len(conditions) > 0 {
|
||||||
whereSql += strings.Join(conditions, " and ")
|
whereSql += strings.Join(conditions, " and ")
|
||||||
dborm = dborm.Where(whereSql, params...)
|
dbg = dbg.Where(whereSql, params...)
|
||||||
}
|
}
|
||||||
// page number and size
|
// page number and size
|
||||||
if pageSize := querys.PageSize; pageSize > 0 {
|
if pageSize := querys.PageSize; pageSize > 0 {
|
||||||
dborm = dborm.Limit(pageSize)
|
dbg = dbg.Limit(pageSize)
|
||||||
if pageNum := querys.PageNum; pageNum > 0 {
|
if pageNum := querys.PageNum; pageNum > 0 {
|
||||||
dborm = dborm.Offset((pageNum - 1) * pageSize)
|
dbg = dbg.Offset((pageNum - 1) * pageSize)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// order by
|
// order by
|
||||||
if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" {
|
if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" {
|
||||||
orderBy := fmt.Sprintf("%s %s", sortField, sortOrder)
|
orderBy := fmt.Sprintf("%s %s", sortField, sortOrder)
|
||||||
dborm = dborm.Order(orderBy)
|
dbg = dbg.Order(orderBy)
|
||||||
}
|
}
|
||||||
|
|
||||||
//err := datasource.DefaultDB().Table(tableName).Where(whereSql, params...).Find(&reports).Error
|
//err := dborm.DefaultDB().Table(tableName).Where(whereSql, params...).Find(&reports).Error
|
||||||
err := dborm.Find(&results).Error
|
err := dbg.Find(&results).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
||||||
return
|
return
|
||||||
@@ -153,7 +152,6 @@ func (k *KpiCReport) GetReport2FE(c *gin.Context) {
|
|||||||
"timeGroup": r.Date[:10] + " " + *r.StartTime,
|
"timeGroup": r.Date[:10] + " " + *r.StartTime,
|
||||||
"createdAt": r.CreatedAt,
|
"createdAt": r.CreatedAt,
|
||||||
"granularity": r.Granularity,
|
"granularity": r.Granularity,
|
||||||
"tenantID": r.TenantID,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, k := range r.KpiValues {
|
for _, k := range r.KpiValues {
|
||||||
@@ -184,7 +182,7 @@ func (k *KpiCReport) GetTotalList(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
tableName := TableName() + "_" + strings.ToLower(querys.NeType)
|
tableName := TableName() + "_" + strings.ToLower(querys.NeType)
|
||||||
dborm := datasource.DefaultDB().Table(tableName)
|
dbg := dborm.DefaultDB().Table(tableName)
|
||||||
|
|
||||||
if querys.StartTime != "" {
|
if querys.StartTime != "" {
|
||||||
conditions = append(conditions, "created_at >= ?")
|
conditions = append(conditions, "created_at >= ?")
|
||||||
@@ -198,12 +196,12 @@ func (k *KpiCReport) GetTotalList(c *gin.Context) {
|
|||||||
whereSql := ""
|
whereSql := ""
|
||||||
if len(conditions) > 0 {
|
if len(conditions) > 0 {
|
||||||
whereSql += strings.Join(conditions, " and ")
|
whereSql += strings.Join(conditions, " and ")
|
||||||
dborm = dborm.Where(whereSql, params...)
|
dbg = dbg.Where(whereSql, params...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// get total number
|
// get total number
|
||||||
var total int64 = 0
|
var total int64 = 0
|
||||||
err := dborm.Count(&total).Error
|
err := dbg.Count(&total).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
||||||
return
|
return
|
||||||
@@ -211,27 +209,26 @@ func (k *KpiCReport) GetTotalList(c *gin.Context) {
|
|||||||
|
|
||||||
// page number and size
|
// page number and size
|
||||||
if pageSize := querys.PageSize; pageSize > 0 {
|
if pageSize := querys.PageSize; pageSize > 0 {
|
||||||
dborm = dborm.Limit(pageSize)
|
dbg = dbg.Limit(pageSize)
|
||||||
if pageNum := querys.PageNum; pageNum > 0 {
|
if pageNum := querys.PageNum; pageNum > 0 {
|
||||||
dborm = dborm.Offset((pageNum - 1) * pageSize)
|
dbg = dbg.Offset((pageNum - 1) * pageSize)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// order by
|
// order by
|
||||||
if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" {
|
if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" {
|
||||||
orderBy := fmt.Sprintf("%s %s", sortField, sortOrder)
|
orderBy := fmt.Sprintf("%s %s", sortField, sortOrder)
|
||||||
dborm = dborm.Order(orderBy)
|
dbg = dbg.Order(orderBy)
|
||||||
}
|
}
|
||||||
|
|
||||||
//err := datasource.DefaultDB().Table(tableName).Where(whereSql, params...).Find(&reports).Error
|
//err := dborm.DefaultDB().Table(tableName).Where(whereSql, params...).Find(&reports).Error
|
||||||
err = dborm.Find(&reports).Error
|
err = dbg.Find(&reports).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
c.JSON(http.StatusOK, services.TotalDataResp(reports, total))
|
c.JSON(http.StatusOK, services.TotalDataResp(reports, total))
|
||||||
//c.JSON(http.StatusOK, reports)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k *KpiCReport) Total(c *gin.Context) {
|
func (k *KpiCReport) Total(c *gin.Context) {
|
||||||
@@ -253,7 +250,7 @@ func (k *KpiCReport) Total(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
tableName := TableName() + "_" + strings.ToLower(querys.NeType)
|
tableName := TableName() + "_" + strings.ToLower(querys.NeType)
|
||||||
dborm := datasource.DefaultDB().Table(tableName)
|
dbg := dborm.DefaultDB().Table(tableName)
|
||||||
|
|
||||||
if querys.StartTime != "" {
|
if querys.StartTime != "" {
|
||||||
conditions = append(conditions, "created_at >= ?")
|
conditions = append(conditions, "created_at >= ?")
|
||||||
@@ -267,10 +264,10 @@ func (k *KpiCReport) Total(c *gin.Context) {
|
|||||||
whereSql := ""
|
whereSql := ""
|
||||||
if len(conditions) > 0 {
|
if len(conditions) > 0 {
|
||||||
whereSql += strings.Join(conditions, " and ")
|
whereSql += strings.Join(conditions, " and ")
|
||||||
dborm = dborm.Where(whereSql, params...)
|
dbg = dbg.Where(whereSql, params...)
|
||||||
}
|
}
|
||||||
var total int64 = 0
|
var total int64 = 0
|
||||||
err := dborm.Count(&total).Error
|
err := dbg.Count(&total).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
||||||
return
|
return
|
||||||
@@ -286,7 +283,7 @@ func (k *KpiCReport) Post(c *gin.Context) {
|
|||||||
c.JSON(http.StatusBadRequest, services.ErrResp(err.Error()))
|
c.JSON(http.StatusBadRequest, services.ErrResp(err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err := datasource.DefaultDB().Create(&report).Error; err != nil {
|
if err := dborm.DefaultDB().Create(&report).Error; err != nil {
|
||||||
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -297,7 +294,7 @@ func (k *KpiCReport) Put(c *gin.Context) {
|
|||||||
var report KpiCReport
|
var report KpiCReport
|
||||||
id := c.Param("id")
|
id := c.Param("id")
|
||||||
|
|
||||||
if err := datasource.DefaultDB().First(&report, id).Error; err != nil {
|
if err := dborm.DefaultDB().First(&report, id).Error; err != nil {
|
||||||
c.JSON(http.StatusNotFound, services.ErrResp("KPI report not found"))
|
c.JSON(http.StatusNotFound, services.ErrResp("KPI report not found"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -306,14 +303,14 @@ func (k *KpiCReport) Put(c *gin.Context) {
|
|||||||
c.JSON(http.StatusBadRequest, services.ErrResp(err.Error()))
|
c.JSON(http.StatusBadRequest, services.ErrResp(err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
datasource.DefaultDB().Save(&report)
|
dborm.DefaultDB().Save(&report)
|
||||||
c.JSON(http.StatusOK, services.DataResp(report))
|
c.JSON(http.StatusOK, services.DataResp(report))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k *KpiCReport) Delete(c *gin.Context) {
|
func (k *KpiCReport) Delete(c *gin.Context) {
|
||||||
id := c.Param("id")
|
id := c.Param("id")
|
||||||
|
|
||||||
if err := datasource.DefaultDB().Delete(&KpiCReport{}, id).Error; err != nil {
|
if err := dborm.DefaultDB().Delete(&KpiCReport{}, id).Error; err != nil {
|
||||||
c.JSON(http.StatusNotFound, services.ErrResp("KPI report not found"))
|
c.JSON(http.StatusNotFound, services.ErrResp("KPI report not found"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -323,7 +320,7 @@ func (k *KpiCReport) Delete(c *gin.Context) {
|
|||||||
|
|
||||||
func InsertKpiCReport(neType string, report KpiCReport) {
|
func InsertKpiCReport(neType string, report KpiCReport) {
|
||||||
tableName := TableName() + "_" + strings.ToLower(neType)
|
tableName := TableName() + "_" + strings.ToLower(neType)
|
||||||
if err := datasource.DefaultDB().Table(tableName).Create(&report).Error; err != nil {
|
if err := dborm.DefaultDB().Table(tableName).Create(&report).Error; err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ type KpiCReport struct {
|
|||||||
Granularity *int8 `gorm:"column:granularity;default:60" json:"granularity,omitempty"` //Time granualarity: 5/10/.../60/300 (second)
|
Granularity *int8 `gorm:"column:granularity;default:60" json:"granularity,omitempty"` //Time granualarity: 5/10/.../60/300 (second)
|
||||||
KpiValues KpiCValues `gorm:"column:kpi_values;type:json" json:"kpiValues,omitempty"`
|
KpiValues KpiCValues `gorm:"column:kpi_values;type:json" json:"kpiValues,omitempty"`
|
||||||
CreatedAt *time.Time `gorm:"column:created_at;default:current_timestamp()" json:"createdAt,omitempty"`
|
CreatedAt *time.Time `gorm:"column:created_at;default:current_timestamp()" json:"createdAt,omitempty"`
|
||||||
TenantID *string `gorm:"column:tenant_id;default:NULL" json:"tenantID,omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type KpiCReportQuery struct {
|
type KpiCReportQuery struct {
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"be.ems/lib/dborm"
|
||||||
"be.ems/lib/services"
|
"be.ems/lib/services"
|
||||||
"be.ems/src/framework/datasource"
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ func (k *KpiCTitle) GetToalList(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
dborm := datasource.DefaultDB().Table(k.TableName())
|
dbg := dborm.DefaultDB().Table(k.TableName())
|
||||||
// construct condition to get
|
// construct condition to get
|
||||||
if neType := querys.NeType; neType != "" {
|
if neType := querys.NeType; neType != "" {
|
||||||
conditions = append(conditions, "ne_type = ?")
|
conditions = append(conditions, "ne_type = ?")
|
||||||
@@ -34,30 +34,30 @@ func (k *KpiCTitle) GetToalList(c *gin.Context) {
|
|||||||
whereSql := ""
|
whereSql := ""
|
||||||
if len(conditions) > 0 {
|
if len(conditions) > 0 {
|
||||||
whereSql += strings.Join(conditions, " and ")
|
whereSql += strings.Join(conditions, " and ")
|
||||||
dborm = dborm.Where(whereSql, params...)
|
dbg = dbg.Where(whereSql, params...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get total number
|
// Get total number
|
||||||
var total int64 = 0
|
var total int64 = 0
|
||||||
if err := dborm.Count(&total).Error; err != nil {
|
if err := dbg.Count(&total).Error; err != nil {
|
||||||
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// page number and size
|
// page number and size
|
||||||
if pageSize := querys.PageSize; pageSize > 0 {
|
if pageSize := querys.PageSize; pageSize > 0 {
|
||||||
dborm = dborm.Limit(pageSize)
|
dbg = dbg.Limit(pageSize)
|
||||||
if pageNum := querys.PageNum; pageNum > 0 {
|
if pageNum := querys.PageNum; pageNum > 0 {
|
||||||
dborm = dborm.Offset((pageNum - 1) * pageSize)
|
dbg = dbg.Offset((pageNum - 1) * pageSize)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// order by
|
// order by
|
||||||
if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" {
|
if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" {
|
||||||
orderBy := fmt.Sprintf("%s %s", sortField, sortOrder)
|
orderBy := fmt.Sprintf("%s %s", sortField, sortOrder)
|
||||||
dborm = dborm.Order(orderBy)
|
dbg = dbg.Order(orderBy)
|
||||||
}
|
}
|
||||||
if err := dborm.Find(&titles).Error; err != nil {
|
if err := dbg.Find(&titles).Error; err != nil {
|
||||||
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -84,7 +84,7 @@ func (k *KpiCTitle) Get(c *gin.Context) {
|
|||||||
if len(conditions) > 0 {
|
if len(conditions) > 0 {
|
||||||
whereSql += strings.Join(conditions, " and ")
|
whereSql += strings.Join(conditions, " and ")
|
||||||
}
|
}
|
||||||
if err := datasource.DefaultDB().Where(whereSql, params...).Find(&titles).Error; err != nil {
|
if err := dborm.DefaultDB().Where(whereSql, params...).Find(&titles).Error; err != nil {
|
||||||
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -111,7 +111,7 @@ func (k *KpiCTitle) Total(c *gin.Context) {
|
|||||||
whereSql += strings.Join(conditions, " and ")
|
whereSql += strings.Join(conditions, " and ")
|
||||||
}
|
}
|
||||||
var total int64 = 0
|
var total int64 = 0
|
||||||
if err := datasource.DefaultDB().Table(k.TableName()).Where(whereSql, params...).Count(&total).Error; err != nil {
|
if err := dborm.DefaultDB().Table(k.TableName()).Where(whereSql, params...).Count(&total).Error; err != nil {
|
||||||
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -126,11 +126,34 @@ func (k *KpiCTitle) Post(c *gin.Context) {
|
|||||||
c.JSON(http.StatusBadRequest, services.ErrResp(err.Error()))
|
c.JSON(http.StatusBadRequest, services.ErrResp(err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err := datasource.DefaultDB().Create(&title).Error; err != nil {
|
result := dborm.DefaultDB().Where("ne_type=? and kpi_id=?", title.NeType, title.KpiID).First(&title)
|
||||||
|
if result.RowsAffected > 0 {
|
||||||
|
c.JSON(http.StatusInternalServerError, services.ErrResp("target kpiC title already exist"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := dborm.DefaultDB().Create(&title).Error; err != nil {
|
||||||
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
kpiCReportTable := "kpi_c_report_" + strings.ToLower(*title.NeType)
|
||||||
|
if !dborm.DefaultDB().Migrator().HasTable(kpiCReportTable) {
|
||||||
|
// clone table "kpi_c_report" to "kpi_c_report_{neType}"
|
||||||
|
sql := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s AS SELECT * FROM %s WHERE 1=0", kpiCReportTable, "kpi_c_report")
|
||||||
|
if _, err := dborm.ExecSQL(sql, nil); err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
sql = fmt.Sprintf("ALTER TABLE %s MODIFY COLUMN `id` int(11) NOT NULL AUTO_INCREMENT FIRST,ADD PRIMARY KEY IF NOT EXISTS (`id`)", kpiCReportTable)
|
||||||
|
if _, err := dborm.ExecSQL(sql, nil); err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
sql = fmt.Sprintf("ALTER TABLE %s ADD INDEX IF NOT EXISTS `idx_timestamp`(`created_at`) USING BTREE, ADD INDEX IF NOT EXISTS `idx_uid_datetime`(`rm_uid`, `date`, `start_time`) USING BTREE", kpiCReportTable)
|
||||||
|
if _, err := dborm.ExecSQL(sql, nil); err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
c.JSON(http.StatusCreated, services.DataResp(title))
|
c.JSON(http.StatusCreated, services.DataResp(title))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,7 +161,7 @@ func (k *KpiCTitle) Put(c *gin.Context) {
|
|||||||
var title KpiCTitle
|
var title KpiCTitle
|
||||||
id := c.Param("id")
|
id := c.Param("id")
|
||||||
|
|
||||||
if err := datasource.DefaultDB().First(&title, id).Error; err != nil {
|
if err := dborm.DefaultDB().First(&title, id).Error; err != nil {
|
||||||
c.JSON(http.StatusNotFound, services.ErrResp("KPIC Title not found"))
|
c.JSON(http.StatusNotFound, services.ErrResp("KPIC Title not found"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -147,7 +170,7 @@ func (k *KpiCTitle) Put(c *gin.Context) {
|
|||||||
c.JSON(http.StatusBadRequest, services.ErrResp(err.Error()))
|
c.JSON(http.StatusBadRequest, services.ErrResp(err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
datasource.DefaultDB().Save(&title)
|
dborm.DefaultDB().Save(&title)
|
||||||
|
|
||||||
c.JSON(http.StatusOK, services.DataResp(title))
|
c.JSON(http.StatusOK, services.DataResp(title))
|
||||||
}
|
}
|
||||||
@@ -155,7 +178,7 @@ func (k *KpiCTitle) Put(c *gin.Context) {
|
|||||||
func (k *KpiCTitle) Delete(c *gin.Context) {
|
func (k *KpiCTitle) Delete(c *gin.Context) {
|
||||||
id := c.Param("id")
|
id := c.Param("id")
|
||||||
|
|
||||||
if err := datasource.DefaultDB().Delete(&KpiCTitle{}, id).Error; err != nil {
|
if err := dborm.DefaultDB().Delete(&KpiCTitle{}, id).Error; err != nil {
|
||||||
c.JSON(http.StatusNotFound, services.ErrResp("KPIC Title not found"))
|
c.JSON(http.StatusNotFound, services.ErrResp("KPIC Title not found"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -166,7 +189,7 @@ func (k *KpiCTitle) Delete(c *gin.Context) {
|
|||||||
func GetActiveKPICList(neType string) []KpiCTitle {
|
func GetActiveKPICList(neType string) []KpiCTitle {
|
||||||
k := new([]KpiCTitle)
|
k := new([]KpiCTitle)
|
||||||
|
|
||||||
err := datasource.DefaultDB().Where("`ne_type` = ? and `status` = 'Active'", neType).Find(&k).Error
|
err := dborm.DefaultDB().Where("`ne_type` = ? and `status` = 'Active'", neType).Find(&k).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ type KpiCTitle struct {
|
|||||||
KpiID *string `gorm:"column:kpi_id;default:NULL," json:"kpiId,omitempty"`
|
KpiID *string `gorm:"column:kpi_id;default:NULL," json:"kpiId,omitempty"`
|
||||||
Title *string `gorm:"column:title;default:NULL," json:"title,omitempty"`
|
Title *string `gorm:"column:title;default:NULL," json:"title,omitempty"`
|
||||||
Expression *string `gorm:"column:expression;default:NULL," json:"expression,omitempty"`
|
Expression *string `gorm:"column:expression;default:NULL," json:"expression,omitempty"`
|
||||||
Status *string `gorm:"column:status" json:"status,omitempty"`
|
Status string `gorm:"column:status;default:'Active'" json:"status"`
|
||||||
Unit *string `gorm:"column:unit" json:"unit,omitempty"`
|
Unit *string `gorm:"column:unit" json:"unit,omitempty"`
|
||||||
Description *string `gorm:"column:description;default:NULL," json:"description,omitempty"`
|
Description *string `gorm:"column:description;default:NULL," json:"description,omitempty"`
|
||||||
CreatedBy *string `gorm:"column:created_by;default:NULL," json:"createdBy,omitempty"`
|
CreatedBy *string `gorm:"column:created_by;default:NULL," json:"createdBy,omitempty"`
|
||||||
|
|||||||
161
lib/dborm/dbgorm.go
Normal file
161
lib/dborm/dbgorm.go
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
package dborm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"regexp"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"gorm.io/driver/mysql"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"gorm.io/gorm/logger"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 数据库连接实例
|
||||||
|
var dbgEngine *gorm.DB
|
||||||
|
|
||||||
|
// 载入连接日志配置
|
||||||
|
func loadLogger() logger.Interface {
|
||||||
|
newLogger := logger.New(
|
||||||
|
log.New(os.Stdout, "[GORM] ", log.LstdFlags), // 将日志输出到控制台
|
||||||
|
logger.Config{
|
||||||
|
SlowThreshold: time.Second, // Slow SQL 阈值
|
||||||
|
LogLevel: logger.Info, // 日志级别 Silent不输出任何日志
|
||||||
|
ParameterizedQueries: false, // 参数化查询SQL 用实际值带入?的执行语句
|
||||||
|
Colorful: false, // 彩色日志输出
|
||||||
|
},
|
||||||
|
)
|
||||||
|
return newLogger
|
||||||
|
}
|
||||||
|
|
||||||
|
// 连接数据库实例
|
||||||
|
func InitGormConnect(dbType, dbUser, dbPassword, dbHost, dbPort, dbName, dbParam, dbLogging any) error {
|
||||||
|
var dialector gorm.Dialector
|
||||||
|
switch dbType {
|
||||||
|
case "mysql":
|
||||||
|
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?%s",
|
||||||
|
dbUser,
|
||||||
|
dbPassword,
|
||||||
|
dbHost,
|
||||||
|
dbPort,
|
||||||
|
dbName,
|
||||||
|
dbParam,
|
||||||
|
)
|
||||||
|
dialector = mysql.Open(dsn)
|
||||||
|
default:
|
||||||
|
err := fmt.Errorf("invalid type: %s", dbType)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
opts := &gorm.Config{}
|
||||||
|
// 是否需要日志输出
|
||||||
|
if dbLogging.(bool) {
|
||||||
|
opts.Logger = loadLogger()
|
||||||
|
}
|
||||||
|
// 创建连接
|
||||||
|
db, err := gorm.Open(dialector, opts)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("failed to open: %s", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// 获取底层 SQL 数据库连接
|
||||||
|
sqlDB, err := db.DB()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("failed to connect DB pool: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// 测试数据库连接
|
||||||
|
err = sqlDB.Ping()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("failed to ping database: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
dbgEngine = db
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 关闭数据库实例
|
||||||
|
func Close() {
|
||||||
|
sqlDB, err := dbgEngine.DB()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("failed to connect pool: %s", err)
|
||||||
|
}
|
||||||
|
if err := sqlDB.Close(); err != nil {
|
||||||
|
log.Fatalf("failed to close: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取默认数据源
|
||||||
|
func DefaultDB() *gorm.DB {
|
||||||
|
return dbgEngine
|
||||||
|
}
|
||||||
|
|
||||||
|
// RawSQL 原生查询语句
|
||||||
|
func RawSQL(sql string, parameters []any) ([]map[string]any, error) {
|
||||||
|
// 数据源
|
||||||
|
db := DefaultDB()
|
||||||
|
|
||||||
|
// 使用正则表达式替换连续的空白字符为单个空格
|
||||||
|
fmtSql := regexp.MustCompile(`\s+`).ReplaceAllString(sql, " ")
|
||||||
|
|
||||||
|
// logger.Infof("sql=> %v", fmtSql)
|
||||||
|
// logger.Infof("parameters=> %v", parameters)
|
||||||
|
|
||||||
|
// 查询结果
|
||||||
|
var rows []map[string]any
|
||||||
|
res := db.Raw(fmtSql, parameters...).Scan(&rows)
|
||||||
|
if res.Error != nil {
|
||||||
|
return nil, res.Error
|
||||||
|
}
|
||||||
|
return rows, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecSQL 原生执行语句
|
||||||
|
func ExecSQL(sql string, parameters []any) (int64, error) {
|
||||||
|
// 数据源
|
||||||
|
db := DefaultDB()
|
||||||
|
|
||||||
|
// 使用正则表达式替换连续的空白字符为单个空格
|
||||||
|
fmtSql := regexp.MustCompile(`\s+`).ReplaceAllString(sql, " ")
|
||||||
|
// 执行结果
|
||||||
|
res := db.Exec(fmtSql, parameters...)
|
||||||
|
if res.Error != nil {
|
||||||
|
return 0, res.Error
|
||||||
|
}
|
||||||
|
return res.RowsAffected, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func CloneTable(srcTable, dstTable string) error {
|
||||||
|
// 获取表 A 的结构信息
|
||||||
|
var columns []gorm.ColumnType
|
||||||
|
dbMigrator := dbgEngine.Migrator()
|
||||||
|
columns, err := dbMigrator.ColumnTypes(srcTable)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to ColumnTypes, %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建表 destination table
|
||||||
|
err = dbMigrator.CreateTable(dstTable)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to CreateTable, %v", err)
|
||||||
|
}
|
||||||
|
// 复制表 src 的字段到表 dst
|
||||||
|
for _, column := range columns {
|
||||||
|
err = dbMigrator.AddColumn(dstTable, column.Name())
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to AddColumn, %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 复制表 src 的主键和索引到表 dst
|
||||||
|
err = dbMigrator.CreateConstraint(dstTable, "PRIMARY")
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to AddColumn, %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dbMigrator.CreateConstraint(dstTable, "INDEX")
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to AddColumn, %v", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@@ -20,10 +20,10 @@ pprof:
|
|||||||
rest:
|
rest:
|
||||||
- ipv4: 0.0.0.0
|
- ipv4: 0.0.0.0
|
||||||
ipv6:
|
ipv6:
|
||||||
port: 33040
|
port: 33030
|
||||||
|
|
||||||
webServer:
|
webServer:
|
||||||
enabled: false
|
enabled: true
|
||||||
rootDir: d:/local.git/fe.ems.vue3/dist
|
rootDir: d:/local.git/fe.ems.vue3/dist
|
||||||
listen:
|
listen:
|
||||||
- addr: :80
|
- addr: :80
|
||||||
@@ -39,7 +39,7 @@ database:
|
|||||||
type: mysql
|
type: mysql
|
||||||
user: root
|
user: root
|
||||||
password: "1000omc@kp!"
|
password: "1000omc@kp!"
|
||||||
host: "192.168.8.58"
|
host: "127.0.0.1"
|
||||||
port: 33066
|
port: 33066
|
||||||
name: "omc_db"
|
name: "omc_db"
|
||||||
connParam: charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=True&interpolateParams=True
|
connParam: charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=True&interpolateParams=True
|
||||||
@@ -181,12 +181,12 @@ testConfig:
|
|||||||
file: ./etc/testconfig.yaml
|
file: ./etc/testconfig.yaml
|
||||||
|
|
||||||
# 静态文件配置, 相对项目根路径或填绝对路径
|
# 静态文件配置, 相对项目根路径或填绝对路径
|
||||||
# staticFile:
|
staticFile:
|
||||||
# # 默认资源,dir目录需要预先创建
|
# 默认资源,dir目录需要预先创建
|
||||||
# default:
|
default:
|
||||||
# prefix: "/static"
|
prefix: "/static"
|
||||||
# dir: "./static"
|
dir: "./static"
|
||||||
# # 文件上传资源目录映射,与项目目录同级
|
# 文件上传资源目录映射,与项目目录同级
|
||||||
# upload:
|
upload:
|
||||||
# prefix: "/upload"
|
prefix: "/upload"
|
||||||
# dir: "./upload"
|
dir: "./upload"
|
||||||
|
|||||||
@@ -213,6 +213,12 @@ func main() {
|
|||||||
fmt.Println("dborm.initDbClient err:", err)
|
fmt.Println("dborm.initDbClient err:", err)
|
||||||
os.Exit(4)
|
os.Exit(4)
|
||||||
}
|
}
|
||||||
|
err = dborm.InitGormConnect(conf.Database.Type, conf.Database.User, conf.Database.Password,
|
||||||
|
conf.Database.Host, conf.Database.Port, conf.Database.Name, conf.Database.ConnParam, true)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("dborm.InitGormConnect err:", err)
|
||||||
|
os.Exit(4)
|
||||||
|
}
|
||||||
err = fm.InitDbClient(conf.Database.Type, conf.Database.User, conf.Database.Password,
|
err = fm.InitDbClient(conf.Database.Type, conf.Database.User, conf.Database.Password,
|
||||||
conf.Database.Host, conf.Database.Port, conf.Database.Name, conf.Database.ConnParam)
|
conf.Database.Host, conf.Database.Port, conf.Database.Name, conf.Database.ConnParam)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user