package repository import ( "fmt" "strings" "time" "be.ems/src/framework/datasource" "be.ems/src/framework/logger" "be.ems/src/framework/utils/parse" "be.ems/src/framework/utils/repo" "be.ems/src/modules/trace/model" ) // 实例化数据层 TraceTaskHlr 结构体 var NewTraceTaskHlr = &TraceTaskHlr{ selectSql: `select id, trace_id, imsi, msisdn, start_time, end_time, status, msg, remark, create_by, create_time, update_by, update_time from trace_task_hlr`, resultMap: map[string]string{ "id": "ID", "trace_id": "TraceId", "imsi": "IMSI", "msisdn": "MSISDN", "start_time": "StartTime", "end_time": "EndTime", "status": "Status", "msg": "Msg", "remark": "Remark", "create_by": "CreateBy", "create_time": "CreateTime", "update_by": "UpdateBy", "update_time": "UpdateTime", }, } // TraceTaskHlr 跟踪_任务给HRL网元 数据层处理 type TraceTaskHlr struct { // 查询视图对象SQL selectSql string // 结果字段与实体映射 resultMap map[string]string } // convertResultRows 将结果记录转实体结果组 func (r *TraceTaskHlr) convertResultRows(rows []map[string]any) []model.TraceTaskHlr { arr := make([]model.TraceTaskHlr, 0) for _, row := range rows { item := model.TraceTaskHlr{} for key, value := range row { if keyMapper, ok := r.resultMap[key]; ok { repo.SetFieldValue(&item, keyMapper, value) } } arr = append(arr, item) } return arr } // SelectPage 根据条件分页查询 func (r *TraceTaskHlr) SelectPage(querys model.TraceTaskHlrQuery) map[string]any { // 查询条件拼接 var conditions []string var params []any if querys.IMSI != "" { conditions = append(conditions, "imsi like concat(?, '%')") params = append(params, querys.IMSI) } if querys.MSISDN != "" { conditions = append(conditions, "msisdn like concat(?, '%')") params = append(params, querys.MSISDN) } if querys.StartTime != "" && len(querys.StartTime) == 13 { conditions = append(conditions, "start_time >= ?") params = append(params, querys.StartTime) } if querys.EndTime != "" && len(querys.EndTime) == 13 { conditions = append(conditions, "end_time <= ?") params = append(params, querys.EndTime) } // 构建查询条件语句 whereSql := "" if len(conditions) > 0 { whereSql += " where " + strings.Join(conditions, " and ") } result := map[string]any{ "total": 0, "rows": []model.TraceTaskHlr{}, } // 查询数量 长度为0直接返回 totalSql := "select count(1) as 'total' from trace_task_hlr" totalRows, err := datasource.RawDB("", totalSql+whereSql, params) if err != nil { logger.Errorf("total err => %v", err) return result } total := parse.Number(totalRows[0]["total"]) if total == 0 { return result } else { result["total"] = total } // 分页 pageNum, pageSize := repo.PageNumSize(querys.PageNum, querys.PageSize) pageSql := " limit ?,? " params = append(params, pageNum*pageSize) params = append(params, pageSize) // 排序 orderSql := "" if querys.SortField != "" { sortSql := querys.SortField if querys.SortOrder != "" { if querys.SortOrder == "desc" { sortSql += " desc " } else { sortSql += " asc " } } orderSql = fmt.Sprintf(" order by id desc, %s ", sortSql) } // 查询数据 querySql := r.selectSql + whereSql + orderSql + pageSql results, err := datasource.RawDB("", querySql, params) if err != nil { logger.Errorf("query err => %v", err) } // 转换实体 result["rows"] = r.convertResultRows(results) return result } // SelectList 根据实体查询 func (r *TraceTaskHlr) SelectList(task model.TraceTaskHlr) []model.TraceTaskHlr { // 查询条件拼接 var conditions []string var params []any if task.IMSI != "" { conditions = append(conditions, "imsi = ?") params = append(params, task.IMSI) } if task.MSISDN != "" { conditions = append(conditions, "msisdn = ?") params = append(params, task.MSISDN) } // 构建查询条件语句 whereSql := "" if len(conditions) > 0 { whereSql += " where " + strings.Join(conditions, " and ") } // 查询数据 querySql := r.selectSql + whereSql + " order by id desc " results, err := datasource.RawDB("", querySql, params) if err != nil { logger.Errorf("query err => %v", err) } // 转换实体 return r.convertResultRows(results) } // SelectByIds 通过ID查询 func (r *TraceTaskHlr) SelectByIds(ids []string) []model.TraceTaskHlr { placeholder := repo.KeyPlaceholderByQuery(len(ids)) querySql := r.selectSql + " where id in (" + placeholder + ")" parameters := repo.ConvertIdsSlice(ids) results, err := datasource.RawDB("", querySql, parameters) if err != nil { logger.Errorf("query err => %v", err) return []model.TraceTaskHlr{} } // 转换实体 return r.convertResultRows(results) } // Insert 新增信息 func (r *TraceTaskHlr) Insert(task model.TraceTaskHlr) string { // 参数拼接 params := make(map[string]any) if task.TraceId != "" { params["trace_id"] = task.TraceId } if task.IMSI != "" { params["imsi"] = task.IMSI } if task.MSISDN != "" { params["msisdn"] = task.MSISDN } if task.StartTime != 0 { params["start_time"] = task.StartTime } if task.EndTime != 0 { params["end_time"] = task.EndTime } if task.Status != "" { params["status"] = task.Status } if task.Msg != "" { params["msg"] = task.Msg } if task.Remark != "" { params["remark"] = task.Remark } if task.CreateBy != "" { params["create_by"] = task.CreateBy params["create_time"] = time.Now().UnixMilli() } // 构建执行语句 keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params) sql := "insert into trace_task_hlr (" + strings.Join(keys, ",") + ")values(" + placeholder + ")" db := datasource.DefaultDB() // 开启事务 tx := db.Begin() // 执行插入 err := tx.Exec(sql, values...).Error if err != nil { logger.Errorf("insert row : %v", err.Error()) tx.Rollback() return "" } // 获取生成的自增 ID var insertedID string err = tx.Raw("select last_insert_id()").Row().Scan(&insertedID) if err != nil { logger.Errorf("insert last id : %v", err.Error()) tx.Rollback() return "" } // 提交事务 tx.Commit() return insertedID } // Update 修改信息 func (r *TraceTaskHlr) Update(task model.TraceTaskHlr) int64 { // 参数拼接 params := make(map[string]any) if task.TraceId != "" { params["trace_id"] = task.TraceId } if task.IMSI != "" { params["imsi"] = task.IMSI } if task.MSISDN != "" { params["msisdn"] = task.MSISDN } if task.StartTime != 0 { params["start_time"] = task.StartTime } if task.EndTime != 0 { params["end_time"] = task.EndTime } if task.Status != "" { params["status"] = task.Status } if task.Msg != "" { params["msg"] = task.Msg } if task.Remark != "" { params["remark"] = task.Remark } if task.UpdateBy != "" { params["update_by"] = task.UpdateBy params["update_time"] = time.Now().UnixMilli() } // 构建执行语句 keys, values := repo.KeyValueByUpdate(params) sql := "update trace_task_hlr set " + strings.Join(keys, ",") + " where id = ?" // 执行更新 values = append(values, task.ID) rows, err := datasource.ExecDB("", sql, values) if err != nil { logger.Errorf("update row : %v", err.Error()) return 0 } return rows } // DeleteByIds 批量删除信息 func (r *TraceTaskHlr) DeleteByIds(ids []string) int64 { placeholder := repo.KeyPlaceholderByQuery(len(ids)) sql := "delete from trace_task_hlr where id in (" + placeholder + ")" parameters := repo.ConvertIdsSlice(ids) results, err := datasource.ExecDB("", sql, parameters) if err != nil { logger.Errorf("delete err => %v", err) return 0 } return results } // LastID 最后一条ID func (r *TraceTaskHlr) LastID() int64 { // 查询数据 querySql := "SELECT id as 'str' FROM trace_task_hlr ORDER BY id DESC LIMIT 1" results, err := datasource.RawDB("", querySql, nil) if err != nil { logger.Errorf("query err %v", err) return 0 } if len(results) > 0 { return parse.Number(results[0]["str"]) } return 0 }