Explorar o código

定时发起指标刷新服务

xyxie hai 3 días
pai
achega
a0941128f3

+ 9 - 0
models/data_manage/edb_info.go

@@ -14,6 +14,8 @@ type EdbInfo struct {
 	EdbInfoId        int    `gorm:"primaryKey"`
 	SourceName       string `description:"来源名称"`
 	Source           int    `description:"来源id"`
+	TerminalCode     string `description:"终端编码"`
+	SubSource        int    `description:"子数据来源:0:经济数据库,1:日期序列"`
 	EdbCode          string `description:"指标编码"`
 	EdbName          string `description:"指标名称"`
 	EdbNameSource    string `description:"指标名称来源"`
@@ -410,3 +412,10 @@ func GetEdbInfoByIdList(edbInfoIdList []int) (items []*EdbInfo, err error) {
 	err = o.Raw(sql, edbInfoIdList).Find(&items).Error
 	return
 }
+
+func GetEdbInfoBySourceAndTerminalCode(source int, terminalCode string) (item *EdbInfo, err error) {
+	o := global.DbMap[utils.DbNameIndex]
+	sql := ` SELECT * FROM edb_info WHERE source = ? AND terminal_code = ? and frequency = '日度' and no_update = 0 limit 1 `
+	err = o.Raw(sql, source, terminalCode).First(&item).Error
+	return
+}

+ 7 - 0
models/data_manage/edb_info_update_log.go

@@ -57,3 +57,10 @@ func GetEdbInfoUpdateLogByCondition(condition string, pars []interface{}) (item
 	err = o.Raw(sql, pars...).Find(&item).Error
 	return
 }
+
+func GetEdbInfoUpdateLogByCreateTime(edbInfoId int, createTime time.Time) (item *EdbInfoUpdateLog, err error) {
+	o := global.DbMap[utils.DbNameIndex]
+	sql := ` SELECT * FROM edb_info_update_log WHERE edb_info_id = ? and create_time >= ? order by id desc limit 1 `
+	err = o.Raw(sql, edbInfoId, createTime).First(&item).Error
+	return
+}

+ 170 - 0
models/data_manage/edb_inspection/edb_inspection_config.go

@@ -0,0 +1,170 @@
+package edb_inspection
+
+import (
+	"eta/eta_task/global"
+	"eta/eta_task/utils"
+	"time"
+)
+
+// EdbInspectionConfig
+// @Description: 数据源巡检配置表
+type EdbInspectionConfig struct {
+	ConfigId          int64     `gorm:"column:config_id;primaryKey;autoIncrement"`
+	Source           int       `gorm:"column:source"`
+	TerminalCode     string    `gorm:"column:terminal_code"`
+	DateType   int8      `gorm:"column:date_type"`
+	StartTime        string    `gorm:"column:start_time"`
+	IntervalTime     int       `gorm:"column:interval_time"`
+	NotifyUsers      string    `gorm:"column:notify_users"`
+	Status           int8      `gorm:"column:status"`
+	CreateTime       time.Time `gorm:"column:create_time"`
+	ModifyTime       time.Time `gorm:"column:modify_time"`
+	InspectionTime   string    `gorm:"-"` // 用于显示巡检时间,不存储到数据库
+}
+
+// Add
+// @Description: 添加巡检配置
+// @receiver m
+// @return err error
+func (m *EdbInspectionConfig) Add() (err error) {
+	m.CreateTime = time.Now()
+	m.ModifyTime = time.Now()
+	err = global.DbMap[utils.DbNameIndex].Create(m).Error
+	return
+}
+
+// Update
+// @Description: 更新巡检配置
+// @receiver m
+// @param cols []string
+// @return err error
+func (m *EdbInspectionConfig) Update(cols []string) (err error) {
+	m.ModifyTime = time.Now()
+	err = global.DbMap[utils.DbNameIndex].Select(cols).Updates(m).Error
+	return
+}
+
+// Delete
+// @Description: 删除巡检配置
+// @receiver m
+// @return err error
+func (m *EdbInspectionConfig) Delete() (err error) {
+	sql := `DELETE FROM edb_inspection_config WHERE config_id = ?`
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, m.ConfigId).Error
+	return
+}
+
+// UpdateStatus
+// @Description: 更新巡检配置状态
+// @receiver m
+// @param status int8
+// @return err error
+func (m *EdbInspectionConfig) UpdateStatus(status int8) (err error) {
+	sql := `UPDATE edb_inspection_config SET status = ?, modify_time = ? WHERE config_id = ?`
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, status, time.Now(), m.ConfigId).Error
+	return
+}
+
+// GetListByTerminalCode
+// @Description: 根据终端编码获取巡检配置列表
+// @param terminalCode string
+// @return list []*EdbInspectionConfig
+// @return err error
+func GetListByTerminalCode(terminalCode string) (list []*EdbInspectionConfig, err error) {
+	sql := `SELECT * FROM edb_inspection_config WHERE terminal_code = ? ORDER BY config_id ASC`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, terminalCode).Find(&list).Error
+	return
+}
+
+// GetById
+// @Description: 根据ID获取巡检配置
+// @param configId int64
+// @return item *EdbInspectionConfig
+// @return err error
+func GetById(configId int64) (item *EdbInspectionConfig, err error) {
+	sql := `SELECT * FROM edb_inspection_config WHERE config_id = ?`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, configId).First(&item).Error
+	return
+}
+
+// GetListBySource
+// @Description: 根据来源获取巡检配置列表
+// @param source int
+// @return list []*EdbInspectionConfig
+// @return err error
+func GetListBySource(source int) (list []*EdbInspectionConfig, err error) {
+	sql := `SELECT * FROM edb_inspection_config WHERE source = ? ORDER BY config_id ASC`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, source).Find(&list).Error
+	return
+}
+
+// 获取所有启用的配置项
+func GetAllEnabledConfigs() (list []*EdbInspectionConfig, err error) {
+	sql := `SELECT * FROM edb_inspection_config WHERE status = 1 ORDER BY config_id ASC`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql).Find(&list).Error
+	return
+}
+
+func GetConfigListBySourceAndTerminalCode(source int, terminalCode string) (list []*EdbInspectionConfigItem, err error) {
+	condition := " c.source = ? "
+	var pars []interface{}
+	pars = append(pars, source)
+
+	if terminalCode != "" {
+		condition += " AND c.terminal_code = ? "
+		pars = append(pars, terminalCode)
+	}
+
+	sql := `SELECT c.*, t.name AS terminal_name, s.source_name FROM edb_inspection_config c left join edb_terminal t on c.terminal_code = t.terminal_code left join edb_source s on c.source = s.edb_source_id WHERE ` + condition + ` ORDER BY c.modify_time DESC`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&list).Error
+	return
+}
+
+type EdbInspectionConfigAddReq struct {
+	ConfigId          int64    
+	Source           int       
+	TerminalCode     string    
+	NotifyUsers         string `description:"通知用户"`
+	//Status              int8   `description:"状态"` 
+	DateType   int8      
+	StartTime         string 
+	IntervalTime      int   
+	List      []InspectionConfigReq `description:"刷新配置项"`
+}
+
+// @Description: 刷新时间配置项
+type InspectionConfigReq struct {
+	InspectionFrequency string `description:"巡检频率"`
+	InspectionFrequencyDay        int    `description:"具体刷新的日期"`
+	InspectionDate      string `description:"巡检日期"`
+	InspectionTime      string `description:"巡检时间"`
+}
+
+type EdbInspectionConfigDetailResp struct {
+	*EdbInspectionConfig
+	List      []InspectionConfigReq `description:"刷新配置项"`
+}
+
+type EdbInspectionConfigItem struct {
+	ConfigId          int64    
+	Source           int       
+	SourceName       string
+	TerminalCode     string    
+	TerminalName     string
+	StartTime        string `description:"开始时间"`
+	IntervalTime     int    `description:"间隔时间"`
+	NotifyUsers         string `description:"通知用户"`
+	NotifyUsersName   string `description:"通知用户名称"`
+	Status              int8   `description:"状态"` 
+	DateType   int8      
+	InspectionTime   string `description:"巡检时间"`
+}
+
+type EdbInspectionConfigStatusReq struct {
+	ConfigId int64 `description:"配置ID"`
+	Status   int8  `description:"状态"`
+}
+
+type EdbInspectionConfigDeleteReq struct {
+	ConfigId int64 `description:"配置ID"`
+}

+ 89 - 0
models/data_manage/edb_inspection/edb_inspection_dashboard.go

@@ -0,0 +1,89 @@
+package edb_inspection
+
+import (
+	"eta/eta_task/global"
+	"eta/eta_task/utils"
+	"time"
+)
+
+// EdbInspectionDashboard
+// @Description: 巡检看板表
+type EdbInspectionDashboard struct {
+	DashboardId         int64     `gorm:"column:dashboard_id;primaryKey;autoIncrement"`
+	Source             int       `gorm:"column:source"`
+	TerminalCode       string    `gorm:"column:terminal_code"`
+	InspectionRecordId int64     `gorm:"column:inspection_record_id"`
+	InspectionTime     time.Time `gorm:"column:inspection_time"`
+	InspectionResult   int8      `gorm:"column:inspection_result"`
+	ErrorReason        string    `gorm:"column:error_reason"`
+	CreateTime         time.Time `gorm:"column:create_time"`
+	ModifyTime         time.Time `gorm:"column:modify_time"`
+}
+
+// Add
+// @Description: 添加巡检看板记录
+// @receiver m
+// @return err error
+func (m *EdbInspectionDashboard) Add() (err error) {
+	m.CreateTime = time.Now()
+	m.ModifyTime = time.Now()
+	err = global.DbMap[utils.DbNameIndex].Create(m).Error
+	return
+}
+
+// Update
+// @Description: 更新巡检看板记录
+// @receiver m
+// @param cols []string
+// @return err error
+func (m *EdbInspectionDashboard) Update(cols []string) (err error) {
+	m.ModifyTime = time.Now()
+	err = global.DbMap[utils.DbNameIndex].Select(cols).Updates(m).Error
+	return
+}
+
+// GetById
+// @Description: 根据ID获取巡检看板记录
+// @param dashboardId int64
+// @return item *EdbInspectionDashboard
+// @return err error
+func GetDashboardById(dashboardId int64) (item *EdbInspectionDashboard, err error) {
+	sql := `SELECT * FROM edb_inspection_dashboard WHERE dashboard_id = ?`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, dashboardId).First(&item).Error
+	return
+}
+
+// GetListByTerminalCode
+// @Description: 根据终端编码获取巡检看板记录列表
+// @param terminalCode string
+// @return list []*EdbInspectionDashboard
+// @return err error
+func GetDashboardListByTerminalCode(terminalCode string) (list []*EdbInspectionDashboard, err error) {
+	sql := `SELECT * FROM edb_inspection_dashboard WHERE terminal_code = ? ORDER BY inspection_time DESC`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, terminalCode).Find(&list).Error
+	return
+}
+
+// GetListByInspectionRecordId
+// @Description: 根据巡检记录ID获取巡检看板记录列表
+// @param inspectionRecordId int64
+// @return list []*EdbInspectionDashboard
+// @return err error
+func GetDashboardListByInspectionRecordId(inspectionRecordId int64) (list []*EdbInspectionDashboard, err error) {
+	sql := `SELECT * FROM edb_inspection_dashboard WHERE inspection_record_id = ? ORDER BY inspection_time DESC`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, inspectionRecordId).Find(&list).Error
+	return
+} 
+
+// GetDashboardBySourceAndTerminalCode
+// @Description: 根据源和终端编码获取巡检看板记录
+// @param source int
+// @param terminalCode string
+// @return item *EdbInspectionDashboard
+// @return err error
+func GetDashboardBySourceAndTerminalCode(source int, terminalCode string) (item *EdbInspectionDashboard, err error) {
+	sql := `SELECT * FROM edb_inspection_dashboard WHERE source = ? AND terminal_code = ?`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, source, terminalCode).First(&item).Error
+	return
+}
+

+ 114 - 0
models/data_manage/edb_inspection/edb_inspection_date_config.go

@@ -0,0 +1,114 @@
+package edb_inspection
+
+import (
+	"eta/eta_task/global"
+	"eta/eta_task/utils"
+	"time"
+)
+
+// EdbInspectionDateConfig
+// @Description: 数据源巡检配置表
+type EdbInspectionDateConfig struct {
+	DateConfigId        int64     `orm:"column(date_config_id);pk" gorm:"primaryKey" `
+	InspectionFrequency string    `description:"巡检频率,枚举值:每自然日、每交易日、每周"`
+	InspectionFrequencyDay int    `description:"具体刷新的日期"`
+	InspectionDate      string    `description:"巡检日期(每周几/每月几号)"`
+	InspectionTime      string    `description:"巡检时间,具体到时分"`
+	ConfigId            int64     `description:"关联的巡检配置ID"`
+	CreateTime          time.Time `description:"创建时间"`
+	ModifyTime          time.Time `description:"修改时间"`
+}
+
+// Add
+// @Description: 添加
+// @author: Roc
+// @receiver m
+// @datetime 2024-01-10 16:11:10
+// @return err error
+func AddEdbInspectionDateConfigList(list []*EdbInspectionDateConfig, configId int64) (err error) {
+	err = global.DbMap[utils.DbNameIndex].CreateInBatches(list, utils.MultiAddNum).Error
+	return
+}
+
+// Update
+// @Description: 更新
+// @author: Roc
+// @receiver m
+// @datetime 2024-01-10 16:11:10
+// @param cols []string
+// @return err error
+func (m *EdbInspectionDateConfig) Update(cols []string) (err error) {
+	err = global.DbMap[utils.DbNameIndex].Select(cols).Updates(m).Error
+	return
+}
+
+// Delete
+// @Description: 删除
+// @author: Roc
+// @receiver m
+// @datetime 2024-01-10 16:11:10
+// @return err error
+func (m *EdbInspectionDateConfig) Delete() (err error) {
+	sql := ` DELETE FROM edb_inspection_date_config WHERE date_config_id=?`
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, m.DateConfigId).Error
+	return
+}
+
+// 删除配置关联的所有巡检日期配置
+func DeleteEdbInspectionDateConfigByConfigId(configId int64) (err error) {
+	sql := `DELETE FROM edb_inspection_date_config WHERE config_id = ?`
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, configId).Error
+	return
+}
+
+// GetEdbInspectionDateConfigListByCondition
+// @Description: 根据条件获取巡检配置列表
+// @author: Roc
+// @datetime 2024-01-10 16:11:10
+// @param inspectionFrequency string
+// @param inspectionFrequencyDay int
+// @param inspectionDate string
+// @param inspectionTime string
+// @param configId int64
+// @return item *EdbInspectionDateConfig
+// @return err error
+func GetEdbInspectionDateConfigListByCondition(inspectionFrequency string, inspectionFrequencyDay int, inspectionDate, inspectionTime string, configId int64) (item *EdbInspectionDateConfig, err error) {
+	sql := `SELECT * FROM edb_inspection_date_config
+	     WHERE inspection_frequency = ? AND inspection_frequency_day = ? AND inspection_date = ? AND inspection_time = ? AND config_id = ? ORDER BY date_config_id ASC `
+
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, inspectionFrequency, inspectionFrequencyDay, inspectionDate, inspectionTime, configId).First(&item).Error
+	return
+}
+
+// GetEdbInspectionDateConfigListByConfigId
+// @Description: 根据配置ID获取巡检日期配置列表
+// @author: Roc
+// @datetime 2024-01-10 16:11:10
+// @param configId int64
+// @return list []*EdbInspectionDateConfig
+// @return err error
+func GetEdbInspectionDateConfigListByConfigId(configId int64) (list []*EdbInspectionDateConfig, err error) {
+	sql := `SELECT * FROM edb_inspection_date_config WHERE config_id = ? ORDER BY date_config_id ASC`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, configId).Find(&list).Error
+	return
+}
+
+func GetEdbInspectionDateConfigListByConfigIdList(configIdList []int64) (list []*EdbInspectionDateConfig, err error) {
+	sql := `SELECT * FROM edb_inspection_date_config WHERE config_id IN (?) ORDER BY date_config_id ASC`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, configIdList).Find(&list).Error
+	return
+}
+
+// GetEdbInspectionDateConfigListBySourceAndTerminalCode
+// @Description: 根据来源和终端编码获取巡检日期配置列表
+// @author: Roc
+// @datetime 2024-01-10 16:11:10
+// @param source int
+// @param terminalCode string
+// @return list []*EdbInspectionDateConfig
+// @return err error
+func GetEdbInspectionDateConfigListBySourceAndTerminalCode(source int, terminalCode string) (list []*EdbInspectionDateConfig, err error) {
+	sql := `SELECT * FROM edb_inspection_date_config WHERE source = ? AND terminal_code = ? ORDER BY date_config_id ASC`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, source, terminalCode).Find(&list).Error
+	return
+}	

+ 85 - 0
models/data_manage/edb_inspection/edb_inspection_message.go

@@ -0,0 +1,85 @@
+package edb_inspection
+
+import (
+	"eta/eta_task/global"
+	"eta/eta_task/utils"
+	"time"
+)
+
+// EdbInspectionMessage
+// @Description: 巡检消息表
+type EdbInspectionMessage struct {
+	MessageId          int64     `gorm:"column:message_id;primaryKey;autoIncrement"`
+	InspectionRecordId int64     `gorm:"column:inspection_record_id"`
+	AdminId            int64     `gorm:"column:admin_id"`
+	Message            string    `gorm:"column:message"`
+	IsRead             int8      `gorm:"column:is_read"`
+	CreateTime         time.Time `gorm:"column:create_time"`
+	ModifyTime         time.Time `gorm:"column:modify_time"`
+}
+
+// Add
+// @Description: 添加巡检消息
+// @receiver m
+// @return err error
+func (m *EdbInspectionMessage) Add() (err error) {
+	m.CreateTime = time.Now()
+	m.ModifyTime = time.Now()
+	err = global.DbMap[utils.DbNameIndex].Create(m).Error
+	return
+}
+
+// Update
+// @Description: 更新巡检消息
+// @receiver m
+// @param cols []string
+// @return err error
+func (m *EdbInspectionMessage) Update(cols []string) (err error) {
+	m.ModifyTime = time.Now()
+	err = global.DbMap[utils.DbNameIndex].Select(cols).Updates(m).Error
+	return
+}
+
+// GetById
+// @Description: 根据ID获取巡检消息
+// @param messageId int64
+// @return item *EdbInspectionMessage
+// @return err error
+func GetMessageById(messageId int64) (item *EdbInspectionMessage, err error) {
+	sql := `SELECT * FROM edb_inspection_message WHERE message_id = ?`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, messageId).First(&item).Error
+	return
+}
+
+// GetListByInspectionRecordId
+// @Description: 根据巡检记录ID获取巡检消息列表
+// @param inspectionRecordId int64
+// @return list []*EdbInspectionMessage
+// @return err error
+func GetMessageListByInspectionRecordId(inspectionRecordId int64) (list []*EdbInspectionMessage, err error) {
+	sql := `SELECT * FROM edb_inspection_message WHERE inspection_record_id = ? ORDER BY create_time DESC`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, inspectionRecordId).Find(&list).Error
+	return
+}
+
+// GetListBySendStatus
+// @Description: 根据发送状态获取巡检消息列表
+// @param sendStatus int8
+// @return list []*EdbInspectionMessage
+// @return err error
+func GetMessageListBySendStatus(sendStatus int8) (list []*EdbInspectionMessage, err error) {
+	sql := `SELECT * FROM edb_inspection_message WHERE send_status = ? ORDER BY create_time DESC`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, sendStatus).Find(&list).Error
+	return
+}
+
+// UpdateSendStatus
+// @Description: 更新消息发送状态
+// @receiver m
+// @param sendStatus int8
+// @return err error
+func (m *EdbInspectionMessage) UpdateSendStatus(sendStatus int8) (err error) {
+	sql := `UPDATE edb_inspection_message SET send_status = ?, modify_time = ? WHERE message_id = ?`
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, sendStatus, time.Now(), m.MessageId).Error
+	return
+} 

+ 76 - 0
models/data_manage/edb_inspection/edb_inspection_record.go

@@ -0,0 +1,76 @@
+package edb_inspection
+
+import (
+	"eta/eta_task/global"
+	"eta/eta_task/utils"
+	"time"
+)
+
+// EdbInspectionRecord
+// @Description: 巡检记录表
+type EdbInspectionRecord struct {
+	InspectionRecordId int64     `gorm:"column:inspection_record_id;primaryKey;autoIncrement"`
+	EdbInfoId         int       `gorm:"column:edb_info_id"`
+	Source            int       `gorm:"column:source"`
+	TerminalCode      string    `gorm:"column:terminal_code"`
+	InspectionTime    time.Time `gorm:"column:inspection_time"`
+	InspectionResult  int8      `gorm:"column:inspection_result"`
+	ErrorReason       string    `gorm:"column:error_reason"`
+	CreateTime        time.Time `gorm:"column:create_time"`
+	ModifyTime        time.Time `gorm:"column:modify_time"`
+}
+
+// Add
+// @Description: 添加巡检记录
+// @receiver m
+// @return err error
+func (m *EdbInspectionRecord) Add() (err error) {
+	m.CreateTime = time.Now()
+	m.ModifyTime = time.Now()
+	err = global.DbMap[utils.DbNameIndex].Create(m).Error
+	return
+}
+
+// Update
+// @Description: 更新巡检记录
+// @receiver m
+// @param cols []string
+// @return err error
+func (m *EdbInspectionRecord) Update(cols []string) (err error) {
+	m.ModifyTime = time.Now()
+	err = global.DbMap[utils.DbNameIndex].Select(cols).Updates(m).Error
+	return
+}
+
+// GetById
+// @Description: 根据ID获取巡检记录
+// @param inspectionRecordId int64
+// @return item *EdbInspectionRecord
+// @return err error
+func GetInspectionRecordById(inspectionRecordId int64) (item *EdbInspectionRecord, err error) {
+	sql := `SELECT * FROM edb_inspection_record WHERE inspection_record_id = ?`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, inspectionRecordId).First(&item).Error
+	return
+}
+
+// GetListByTerminalCode
+// @Description: 根据终端编码获取巡检记录列表
+// @param terminalCode string
+// @return list []*EdbInspectionRecord
+// @return err error
+func GetInspectionRecordListByTerminalCode(terminalCode string) (list []*EdbInspectionRecord, err error) {
+	sql := `SELECT * FROM edb_inspection_record WHERE terminal_code = ? ORDER BY inspection_time DESC`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, terminalCode).Find(&list).Error
+	return
+}
+
+// GetListBySource
+// @Description: 根据来源获取巡检记录列表
+// @param source int
+// @return list []*EdbInspectionRecord
+// @return err error
+func GetInspectionRecordListBySource(source int) (list []*EdbInspectionRecord, err error) {
+	sql := `SELECT * FROM edb_inspection_record WHERE source = ? ORDER BY inspection_time DESC`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, source).Find(&list).Error
+	return
+} 

+ 351 - 0
services/edb_inspection.go

@@ -0,0 +1,351 @@
+package services
+
+import (
+	"context"
+	"errors"
+	"eta/eta_task/models/data_manage"
+	"eta/eta_task/models/data_manage/edb_inspection"
+	"eta/eta_task/services/data"
+	"eta/eta_task/utils"
+	"fmt"
+	"strconv"
+	"strings"
+	"time"
+)
+
+// GetInspectionConfigData
+// @Description: 获取需要巡检的指标配置列表
+// @param now time.Time
+// @return sourceEdbInfoListMap map[string][]*edb_inspection.EdbInspectionConfig
+// @return err error
+func GetInspectionConfigData(now time.Time) (configList []*edb_inspection.EdbInspectionConfig, err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+		}
+	}()
+
+	currTimeStr := getPreviousHalfHour(now)
+
+	// 获取所有启用的巡检配置
+	list, err := edb_inspection.GetAllEnabledConfigs()
+	if err != nil {
+		err = errors.New("GetAllEnabledConfigs Err:" + err.Error())
+		return
+	}
+
+	// 根据时间筛选需要巡检的配置
+	for _, config := range list {
+		if config.DateType == 1 {
+			// 检查是否到达巡检时间
+			if !isInspectionTime(config, currTimeStr) {
+				continue
+			}
+		}else {
+			// start_time(从几点开始) 和interval_time(间隔N小时)
+			if config.StartTime != "" && config.StartTime > currTimeStr {
+				continue
+			}
+			if config.IntervalTime > 0 {
+				// todo 检查是否到达巡检时间
+				// 得到所有时间列表,然后检查是否到达巡检时间
+				timeListMap := getIntervalTimeMap(config.StartTime, config.IntervalTime)
+				if _, ok := timeListMap[currTimeStr]; !ok {
+					continue
+				}
+			}
+		}
+
+		configList = append(configList, config)
+	}
+
+	return
+}
+
+// isInspectionTime
+// @Description: 检查是否到达巡检时间
+// @param config *edb_inspection.EdbInspectionConfig
+// @param currTimeStr string
+// @return bool
+func isInspectionTime(config *edb_inspection.EdbInspectionConfig, currTimeStr string) bool {
+	// 查询所有的日期配置
+	dateConfigs, err := edb_inspection.GetEdbInspectionDateConfigListByConfigId(config.ConfigId)
+	if err != nil {
+		return false
+	}
+
+	// 获取当前是周几
+	currWeekDay := time.Now().Weekday()
+	// 将周日转换为7,其他保持不变
+	if currWeekDay == time.Sunday {
+		currWeekDay = 7
+	} else {
+		currWeekDay = currWeekDay + 1 // 将周一转换为1,周二转换为2,以此类推
+	}
+
+	// 定义中文周几的映射
+	weekdayMap := map[int]string{
+		1: "周一",
+		2: "周二",
+		3: "周三",
+		4: "周四",
+		5: "周五",
+		6: "周六",
+		7: "周日",
+	}
+
+	for _, dateConfig := range dateConfigs {
+		if dateConfig.InspectionTime != currTimeStr {
+			continue
+		}
+
+		switch dateConfig.InspectionFrequency {
+		case "每自然日":
+			return true
+		case "每交易日":
+			// 周六日不处理
+			if currWeekDay == 6 || currWeekDay == 7 {
+				continue
+			}
+			return true
+		case "每周":
+			// 检查当前是周几
+			if weekdayMap[int(currWeekDay)] == dateConfig.InspectionDate {
+				return true
+			}
+			continue
+		}
+	}
+	return false
+}
+
+// AddEdbInspectionRecord
+// @Description: 添加巡检记录
+// @param cont context.Context
+// @return err error
+func AddEdbInspectionRecord() (err error) {
+	now := time.Now()
+	
+	// 获取需要巡检的配置
+	configList, err := GetInspectionConfigData(now)
+	if err != nil {
+		return
+	}
+	errMsgList := make([]string, 0)
+	defer func() {
+		if len(errMsgList) > 0 {
+			utils.FileLog.Error("巡检失败原因:%s", errMsgList)
+		}
+	}()
+
+	// 遍历每个数据源和终端的配置
+	for _, config := range configList {
+		edbInfo, tmpErr := data_manage.GetEdbInfoBySourceAndTerminalCode(config.Source, config.TerminalCode)
+		if tmpErr != nil {
+			errMsgList = append(errMsgList, fmt.Sprintf("获取指标信息失败: source=%s, terminalCode=%s, err=%v", 
+				config.Source, config.TerminalCode, tmpErr))
+			continue
+		}
+
+		// 调用指标刷新接口
+		startDate := ""
+		dataRefreshNum := 1
+		edbEndDate, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
+		if err != nil {
+			errMsgList = append(errMsgList, edbInfo.EdbCode+"ParseEndDate Err:"+err.Error())
+			continue
+		}
+		if edbInfo.Frequency == "日度" {
+			startDate = edbEndDate.AddDate(0, 0, -dataRefreshNum).Format(utils.FormatDate)
+		} else if edbInfo.Frequency == "周度" {
+			startDate = edbEndDate.AddDate(0, 0, -(dataRefreshNum * 7)).Format(utils.FormatDate)
+		} else {
+			startDate = edbEndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
+		}
+		
+		refreshResult := false
+		refreshErrMsg := "状态异常:服务异常"
+		
+		// 数据更新
+		resp, tmpErr := data.RefreshEdbData(edbInfo.EdbInfoId, edbInfo.Source, edbInfo.SubSource, edbInfo.EdbCode, startDate)
+		if tmpErr != nil {
+			errMsgList = append(errMsgList, edbInfo.EdbCode+"RefreshEdbData Err:"+tmpErr.Error())
+		} else {
+			if resp.Ret != 200 {
+				errMsgList = append(errMsgList, edbInfo.EdbCode+";RefreshEdbData Err:"+resp.Msg+";ErrMsg:"+resp.ErrMsg)
+			} else {
+				// 查询刷新记录
+				refreshRecord, tmpErr := data_manage.GetEdbInfoUpdateLogByCreateTime(edbInfo.EdbInfoId, now)
+				if tmpErr == nil {
+					if refreshRecord.DataUpdateResult == 1 {
+						refreshResult = true
+						refreshErrMsg = "状态正常"
+					} else {
+						refreshErrMsg = "状态异常:"+refreshRecord.DataUpdateFailedReason
+					}
+				}
+			}
+		}
+
+		// 1. 创建巡检记录
+		record := &edb_inspection.EdbInspectionRecord{
+			EdbInfoId:        edbInfo.EdbInfoId,
+			Source:          config.Source,
+			TerminalCode:    config.TerminalCode,
+			InspectionTime:  now,
+			InspectionResult: 0,
+			CreateTime:      now,
+			ModifyTime:      now,
+		}
+		
+		if refreshResult {
+			record.InspectionResult = 1 // 成功
+		} else {
+			record.InspectionResult = 2 // 失败
+			record.ErrorReason = refreshErrMsg
+		}
+			
+		// 2. 保存巡检记录
+		err = record.Add()
+		if err != nil {
+			errMsgList = append(errMsgList, fmt.Sprintf("保存巡检记录失败: edbInfoId=%d, err=%v", 
+				edbInfo.EdbInfoId, err))
+			continue
+		}
+		
+		// 3. 更新巡检看板
+		// 判断该终端的巡检看板是否已存在,如果存在则更新看板,否则创建看板
+		dashboard, tempErr := edb_inspection.GetDashboardBySourceAndTerminalCode(config.Source, config.TerminalCode)
+		if tempErr != nil && !utils.IsErrNoRow(tempErr) {
+			errMsgList = append(errMsgList, fmt.Sprintf("获取巡检看板失败: source=%d, terminalCode=%s, err=%v", 
+				config.Source, config.TerminalCode, err))
+			continue
+		}
+		if dashboard == nil {
+			dashboard = &edb_inspection.EdbInspectionDashboard{
+				Source:             config.Source,
+				TerminalCode:       config.TerminalCode,
+				InspectionRecordId: record.InspectionRecordId,
+				InspectionTime:     now,
+				InspectionResult:   record.InspectionResult,
+				ErrorReason:        record.ErrorReason,
+				CreateTime:         now,
+				ModifyTime:         now,
+			}
+			err = dashboard.Add()
+			if err != nil {
+				errMsgList = append(errMsgList, fmt.Sprintf("更新巡检看板失败: recordId=%d, err=%v", 
+					record.InspectionRecordId, err))
+				continue
+			}
+		} else {
+			dashboard.InspectionRecordId = record.InspectionRecordId
+			dashboard.InspectionTime = now
+			dashboard.InspectionResult = record.InspectionResult
+			dashboard.ErrorReason = record.ErrorReason
+			err = dashboard.Update([]string{"InspectionRecordId", "InspectionTime", "InspectionResult", "ErrorReason"})
+			if err != nil {
+				errMsgList = append(errMsgList, fmt.Sprintf("更新巡检看板失败: recordId=%d, err=%v", 
+					record.InspectionRecordId, err))
+				continue
+			}
+		}
+		
+		// 4. 如果巡检失败,添加消息记录
+		if record.InspectionResult == 2 {
+			msg := fmt.Sprintf("指标[%s]巡检结果异常: %s", edbInfo.EdbCode, record.ErrorReason)
+			adminList := strings.Split(config.NotifyUsers, ",")
+			for _, adminIdStr := range adminList {
+				adminId, _ := strconv.ParseInt(adminIdStr, 10, 64)
+				message := &edb_inspection.EdbInspectionMessage{
+					InspectionRecordId: record.InspectionRecordId,
+					AdminId:            adminId,
+					Message:            msg,
+					IsRead:             0,
+					CreateTime:         now,
+					ModifyTime:         now,
+				}
+				err = message.Add()
+				if err != nil {
+					errMsgList = append(errMsgList, fmt.Sprintf("添加消息记录失败: recordId=%d, adminId=%d, err=%v", 
+						record.InspectionRecordId, adminId, err))
+					continue
+				}
+			}
+		}
+	}
+
+	return
+}
+
+// GetEdbInspectionConfig
+// @Description: 获取巡检配置
+// @param cont context.Context
+// @return err error
+func GetEdbInspectionConfig(cont context.Context) (err error) {
+	// 获取所有巡检配置
+	list, err := edb_inspection.GetAllEnabledConfigs()
+	if err != nil {
+		return
+	}
+	
+	// 获取每个配置的详细信息
+	for _, config := range list {
+		// 获取日期配置
+		dateConfigs, err := edb_inspection.GetEdbInspectionDateConfigListByConfigId(config.ConfigId)
+		if err != nil {
+			fmt.Printf("Failed to get date configs for config %d: %v\n", config.ConfigId, err)
+			continue
+		}
+		
+		// 获取终端信息
+		terminalInfo, err := edb_inspection.GetConfigListBySourceAndTerminalCode(config.Source, config.TerminalCode)
+		if err != nil {
+			fmt.Printf("Failed to get terminal info for config %d: %v\n", config.ConfigId, err)
+			continue
+		}
+		
+		// TODO: 处理配置信息
+		fmt.Printf("Config %d: %+v\n", config.ConfigId, config)
+		fmt.Printf("Date configs: %+v\n", dateConfigs)
+		fmt.Printf("Terminal info: %+v\n", terminalInfo)
+	}
+	
+	return
+}
+
+func getIntervalTimeMap(startTime string, intervalNum int) map[string]struct{} {
+	timeListMap := make(map[string]struct{})
+	
+	// 解析开始时间startTime为09:00,转成时间格式
+	start, err := time.Parse("15:04", startTime)
+	if err != nil {
+		// 如果解析失败,尝试添加秒数
+		start, err = time.Parse("15:04:05", startTime)
+		if err != nil {
+			return timeListMap
+		}
+	}
+	
+	// 生成24小时内的时间点
+	current := start
+	// 记录已经生成的时间点数量,防止死循环
+	generatedCount := 0
+	maxPoints := 24 / intervalNum + 1 // 最多生成的时间点数量
+	
+	for generatedCount < maxPoints {
+		// 将时间点添加到map中,格式化为15:04
+		timeListMap[current.Format("15:04")] = struct{}{}
+		generatedCount++
+		
+		// 增加间隔时间
+		current = current.Add(time.Duration(intervalNum) * time.Hour)
+		
+		// 如果超过24小时,则停止
+		if current.Hour() > 23 || current.Hour() < start.Hour() {
+			break
+		}
+	}
+	
+	return timeListMap
+}