package com.iplatform.base.service; import com.iplatform.model.vo.ApiTime; import com.walker.infrastructure.utils.StringUtils; import com.walker.jdbc.service.BaseServiceImpl; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Service; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; @Service public class ApiTimeServiceImpl extends BaseServiceImpl { private final ApiTimeMapper apiTimeMapper = new ApiTimeMapper(); /** * 检索接口调用时间列表 * @param currentDate 当前日期如:20240229(可选) * @param maxSize 限制返回记录最大条数 * @param millis 条件:最小花费时间,毫秒,超过该时间的记录 * @return */ public List queryCostList(Integer currentDate, Integer maxSize, Long millis){ StringBuilder sql = new StringBuilder(SQL_QUERY); List plist = new ArrayList<>(8); if(currentDate != null){ sql.append(" and request_date = ?"); plist.add(currentDate); } if(millis != null){ sql.append(" and cost_time >= ?"); plist.add(millis); } if(maxSize != null){ sql.append(" limit ?"); plist.add(maxSize); } Object[] parameters = plist.toArray(); return this.select(sql.toString(), parameters, apiTimeMapper); } public void execBatchInsertAptTime(List data){ if(StringUtils.isEmptyList(data)){ return; } List parameters = new ArrayList<>(); Object[] one = null; for(ApiTime apiTime : data){ one = this.transferToArray(apiTime); parameters.add(one); } this.execBatchUpdate(SQL_INSERT, parameters); } /** * 写入一条接口调用时间记录 * @param apiTime * @date 2024-02-29 */ public void execInsertApiTime(ApiTime apiTime){ Object[] one = this.transferToArray(apiTime); this.update(SQL_INSERT, one); } private Object[] transferToArray(ApiTime apiTime){ Object[] one = new Object[6]; one[0] = apiTime.getId(); one[1] = apiTime.getCreateTime(); one[2] = apiTime.getRequestDate(); one[3] = apiTime.getUri(); one[4] = apiTime.getCostTime(); one[5] = apiTime.getUser(); return one; } private class ApiTimeMapper implements RowMapper{ @Override public ApiTime mapRow(ResultSet rs, int rowNum) throws SQLException { ApiTime e = new ApiTime(); e.setId(rs.getLong("id")); e.setCreateTime(rs.getLong("create_time")); e.setRequestDate(rs.getInt("request_date")); e.setUri(rs.getString("uri")); e.setCostTime(rs.getLong("cost_time")); e.setUser(StringUtils.EMPTY_STRING); return e; } } private static final String SQL_QUERY = "select * from s_api_time where 1=1 "; private static final String SQL_INSERT = "insert into s_api_time(id,create_time,request_date,uri,cost_time,user_name) values(?,?,?,?,?,?)"; }