package data import ( "encoding/json" "errors" "eta/eta_api/models/data_manage/edb_inspection" "eta/eta_api/models/data_manage" "eta/eta_api/models/system" "eta/eta_api/utils" "fmt" "strconv" "strings" "time" ) // 所有巡检配置key var allDefaultEdbInspectionConfigKey = `edb_inspection_config:default:all:` // GetAllDefaultEdbInspectionConfigListBySource // @Description: 获取默认的所有巡检配置列表 // @author: Roc // @datetime 2024-01-10 15:03:36 // @param source int // @return list []*edb_inspection.EdbInspectionConfig // @return err error func GetAllDefaultEdbInspectionConfigListBySource(source int) (list []*edb_inspection.EdbInspectionConfig, err error) { key := getAllDefaultEdbInspectionConfigKey(source) if utils.Re == nil { if utils.Re == nil && utils.Rc.IsExist(key) { if data, err1 := utils.Rc.RedisBytes(key); err1 == nil { err = json.Unmarshal(data, &list) return } } } list, err = edb_inspection.GetListBySource(source) if err != nil { return } // 将数据加入缓存 if utils.Re == nil { data, _ := json.Marshal(list) utils.Rc.Put(key, data, 2*time.Hour) } return } // SaveEdbInspectionConfig // @Description: 设置巡检配置接口 // @author: Roc // @datetime 2024-01-10 15:11:19 // @param req *edb_inspection.EdbInspectionConfigAddReq // @return err error // @return errMsg string // @return isSendEmail bool func SaveEdbInspectionConfig(req *edb_inspection.EdbInspectionConfigAddReq) (err error, errMsg string, isSendEmail bool) { isSendEmail = true errMsg = `保存失败` if req.Source <= 0 { errMsg = "来源不能为空" err = errors.New(errMsg) isSendEmail = false return } if req.TerminalCode == "" { errMsg = "终端编码不能为空" err = errors.New(errMsg) isSendEmail = false return } // 判断终端是否存在 terminal, e := data_manage.GetEdbTerminalByCode(req.TerminalCode) if e != nil { errMsg = "终端不存在" err = errors.New(errMsg) isSendEmail = false return } if terminal.TerminalCode != "" && terminal.Source != req.Source { errMsg = "数据源不匹配" err = errors.New(errMsg) isSendEmail = false return } //判断该终端配置是否已存在 if req.ConfigId <= 0 { inspectionConfig, e := edb_inspection.GetListByTerminalCode(req.TerminalCode) if e != nil && !utils.IsErrNoRow(e) { errMsg = "查询终端配置失败" err = errors.New(errMsg) isSendEmail = false return } if e == nil && len(inspectionConfig) > 0 { errMsg = "终端配置已存在" err = errors.New(errMsg) isSendEmail = false return } } lenConf := len(req.List) if req.DateType == 1 && lenConf == 0 { errMsg = "至少需要一个巡检配置" err = errors.New(errMsg) isSendEmail = false return } // if req.DateType == 1 && lenConf > 5 { // errMsg = "巡检时间设置最多不超过5个" // err = errors.New(errMsg) // isSendEmail = false // return // } tmpArr := []string{"每自然日", "每交易日", "每周"} // 配置的map,避免同一种类型配置同一个时间 configMap := make(map[string]string) for _, v := range req.List { if !utils.InArrayByStr(tmpArr, v.InspectionFrequency) { errMsg = "巡检频率不合法" err = errors.New(errMsg) isSendEmail = false return } if v.InspectionTime == "" { errMsg = "请选择具体时间" err = errors.New(errMsg) isSendEmail = false return } // 配置的map,避免同一种类型配置同一个时间 key := fmt.Sprint(v.InspectionFrequency, "_", v.InspectionDate, "_", v.InspectionTime) if _, ok := configMap[key]; ok { errMsg = "巡检频率和日期不能重复" err = errors.New(errMsg) isSendEmail = false return } configMap[key] = key } configId := req.ConfigId if configId > 0 { // 查询配置 inspectionConfig, e := edb_inspection.GetById(configId) if e != nil { errMsg = "配置不存在" err = errors.New(errMsg) isSendEmail = false return } inspectionConfig.ConfigId = req.ConfigId updateCols := []string{"source", "terminal_code", "date_type", "start_time", "interval_time", "notify_users", "modify_time"} inspectionConfig.Source = req.Source inspectionConfig.TerminalCode = req.TerminalCode inspectionConfig.DateType = req.DateType inspectionConfig.StartTime = req.StartTime inspectionConfig.IntervalTime = req.IntervalTime inspectionConfig.NotifyUsers = req.NotifyUsers inspectionConfig.ModifyTime = time.Now() err = inspectionConfig.Update(updateCols) } else { // 创建巡检配置 inspectionConfig := &edb_inspection.EdbInspectionConfig{ Source: req.Source, TerminalCode: req.TerminalCode, DateType: req.DateType, StartTime: req.StartTime, Status: 1, IntervalTime: req.IntervalTime, NotifyUsers: req.NotifyUsers, CreateTime: time.Now(), ModifyTime: time.Now(), } err = inspectionConfig.Add() if err != nil { return } configId = inspectionConfig.ConfigId } if err != nil { return } // 删除原先的配置 err = edb_inspection.DeleteEdbInspectionDateConfigByConfigId(configId) if err != nil { return } // 创建巡检日期配置 dateConfigList := make([]*edb_inspection.EdbInspectionDateConfig, 0) if req.DateType == 1 { for _, v := range req.List { dateConfig := &edb_inspection.EdbInspectionDateConfig{ InspectionFrequency: v.InspectionFrequency, InspectionFrequencyDay: v.InspectionFrequencyDay, InspectionDate: v.InspectionDate, InspectionTime: v.InspectionTime, ConfigId: configId, CreateTime: time.Now(), ModifyTime: time.Now(), } dateConfigList = append(dateConfigList, dateConfig) } if len(dateConfigList) > 0 { err = edb_inspection.AddEdbInspectionDateConfigList(dateConfigList, configId) if err != nil { return } } } // 清除缓存 { key := getAllDefaultEdbInspectionConfigKey(req.Source) if utils.Re == nil { _ = utils.Rc.Delete(key) } } return } // HandleInspectionTime // @Description: 处理巡检时间的显示 // @author: Roc // @datetime 2024-01-10 17:00:03 // @param source int // @param terminalCode string // @return list []*edb_inspection.EdbInspectionConfig // @return err error // @return errMsg string // @return isSendEmail bool func GetConfigList(source int, terminalCode string) (list []*edb_inspection.EdbInspectionConfigItem, err error, errMsg string, isSendEmail bool) { isSendEmail = true errMsg = "获取失败" list, err = edb_inspection.GetConfigListBySourceAndTerminalCode(source, terminalCode) if err != nil { return } if len(list) <= 0 { return } configIdList := make([]int64, 0) adminIds := make([]int, 0) for _, config := range list { configIdList = append(configIdList, config.ConfigId) adminIdSlice := strings.Split(config.NotifyUsers, ",") for _, adminId := range adminIdSlice { if adminId != "" { id, _ := strconv.Atoi(adminId) adminIds = append(adminIds, id) } } } adminNameMap := make(map[int]string) if len(adminIds) > 0 { adminList, e := system.GetAdminItemByIdList(adminIds) if e != nil { errMsg = "获取通知用户失败" err = errors.New(errMsg+e.Error()) isSendEmail = false return } for _, admin := range adminList { adminNameMap[admin.AdminId] = admin.RealName } } // 获取每个配置的日期配置 dateConfigs, tmpErr := edb_inspection.GetEdbInspectionDateConfigListByConfigIdList(configIdList) if tmpErr != nil { err = tmpErr return } // 处理巡检时间显示 inspectionTimeList := make(map[int64][]string, 0) for _, dateConfig := range dateConfigs { inspectionTimeList[dateConfig.ConfigId] = append(inspectionTimeList[dateConfig.ConfigId], GetInspectionStr(dateConfig.InspectionFrequency, dateConfig.InspectionFrequencyDay, dateConfig.InspectionTime)) } for _, config := range list { if config.NotifyUsers != "" { adminIdSlice := strings.Split(config.NotifyUsers, ",") nameList := make([]string, 0) for _, adminId := range adminIdSlice { if adminId != "" { id, _ := strconv.Atoi(adminId) nameList = append(nameList, adminNameMap[id]) } } config.NotifyUsersName = strings.Join(nameList, ",") } if config.DateType == 1 { tmpList, ok := inspectionTimeList[config.ConfigId] if ok { config.InspectionTime = strings.Join(tmpList, ",") } } else { config.InspectionTime = fmt.Sprintf("%s开始每间隔%d小时", config.StartTime, config.IntervalTime) } } return } func GetConfigDetail(configId int64) (detail *edb_inspection.EdbInspectionConfigDetailResp, err error) { item, err := edb_inspection.GetById(configId) if err != nil { return } dateConfigs, err := edb_inspection.GetEdbInspectionDateConfigListByConfigId(configId) if err != nil { return } list := make([]edb_inspection.InspectionConfigReq, 0) for _, dateConfig := range dateConfigs { list = append(list, edb_inspection.InspectionConfigReq{ InspectionFrequency: dateConfig.InspectionFrequency, InspectionFrequencyDay: dateConfig.InspectionFrequencyDay, InspectionDate: dateConfig.InspectionDate, InspectionTime: dateConfig.InspectionTime, }) } detail = &edb_inspection.EdbInspectionConfigDetailResp{ EdbInspectionConfig: item, List: list, } return } // getAllDefaultEdbInspectionConfigKey // @Description: 获取默认的所有巡检配置key // @author: Roc // @datetime 2024-01-10 15:02:49 // @param source int // @return string func getAllDefaultEdbInspectionConfigKey(source int) string { return allDefaultEdbInspectionConfigKey + fmt.Sprintf("%d", source) } // GetInspectionStr // @Description: 获取巡检配置的中文字符串 // @author: Roc // @datetime 2024-01-10 16:05:10 // @param inspectionFrequency string // @param inspectionFrequencyDay int // @param inspectionTime string // @return string func GetInspectionStr(inspectionFrequency string, inspectionFrequencyDay int, inspectionTime string) string { inspectionDayStr := `` switch inspectionFrequency { case "每自然日", "每交易日": case "每周": switch inspectionFrequencyDay { case 0: inspectionDayStr = "日" case 1: inspectionDayStr = "一" case 2: inspectionDayStr = "二" case 3: inspectionDayStr = "三" case 4: inspectionDayStr = "四" case 5: inspectionDayStr = "五" case 6: inspectionDayStr = "六" case 7: inspectionDayStr = "日" } default: if inspectionFrequencyDay > 0 { inspectionDayStr = fmt.Sprintf("第%d天", inspectionFrequencyDay) } else { inspectionDayStr = `最后一天` } } return inspectionFrequency + inspectionDayStr + " " + inspectionTime }