09081017:给任务模块提供查询和添加的接口

master
冷调 2024-09-08 10:18:33 +08:00
parent 5b817cf56b
commit ae6729c434
5 changed files with 123 additions and 10 deletions

View File

@ -13,9 +13,7 @@ import lombok.experimental.SuperBuilder;
/** /**
* structure * structure
* * @author Lenovo
* @author Saisai
* @date 2024-04-22
*/ */
@Data @Data
@NoArgsConstructor @NoArgsConstructor

View File

@ -22,11 +22,20 @@ public class DataValueModel {
* ID * ID
*/ */
private Long basicId; private Long basicId;
private Long tableId;
/** /**
* sql * sql
*/ */
private String sql; private String sql;
/**
*
*/
private Long one; private Long one;
/**
*
*/
private Integer two; private Integer two;
private DataValueModel[][] dataValues;
} }

View File

@ -101,7 +101,15 @@ public class DataValueController {
// 返回数据 // 返回数据
return Result.success(dataValues); return Result.success(dataValues);
} }
@PostMapping("/addTableValueByType")
public Result addTableValueByType(@RequestBody DataValueModel dataValueModel){
//开始执行的时间
long begin = System.currentTimeMillis();
int i =dataValueService.addTableValueByType(dataValueModel);
// 结束执行的时间
long end =System.currentTimeMillis();
//打印出执行该方法的耗时
System.out.println("耗时:"+(end-begin));
return Result.success();
}
} }

View File

@ -32,4 +32,5 @@ public interface DataValueService extends IService<DataValue> {
*/ */
DataValue[][] findTableValueByTable(DataValueModel dataValueModel); DataValue[][] findTableValueByTable(DataValueModel dataValueModel);
int addTableValueByType(DataValueModel dataValueModel);
} }

View File

@ -22,11 +22,9 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import static com.muyu.source.pool.config.BaseConfig.SELECTALL; import static com.muyu.source.pool.config.BaseConfig.SELECTALL;
@ -343,6 +341,105 @@ public class DataValueServiceImpl extends ServiceImpl<DataValueMapper, DataValue
return rows; return rows;
} }
/**
* IDSQL
* @param dataValueModel
* @return List<DataValue>
*/
@Override
public int addTableValueByType(DataValueModel dataValueModel) {
MysqlQuery mysqlQuery = new MysqlQuery();
mysqlQuery.setDataSourceId(dataValueModel.getBasicId());
DataSource dataSource = dataSourceService.getById(dataValueModel.getBasicId());
MysqlPool mysqlPool = new MysqlPool(dataSource);
mysqlPool.init();
ExecutorService executorService1 = Executors.newFixedThreadPool(8);
AtomicInteger atomicInteger = new AtomicInteger();
List<DataValue[][]> batches =splitData(dataValueModel.getDataValues(),2000);
Connection conn = mysqlPool.getConn();
try {
conn.setAutoCommit(false);
for (DataValue[][] batch : batches) {
executorService1.submit(()->{
try {
Statement statement = conn.createStatement();
statement.executeQuery(dataValueModel.getSql());
atomicInteger.addAndGet(batch.length);
} catch (SQLException e) {
try {
//回滚事务
conn.rollback();
} catch (SQLException ex) {
throw new RuntimeException(ex);
}
throw new RuntimeException(e);
}
});
}
executorService1.shutdown();
executorService1.awaitTermination(1, TimeUnit.MINUTES);
conn.commit();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException(e);
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
mysqlPool.closeConn();
mysqlPool.closeBaseConn();
}
return atomicInteger.get();
}
/**
*
* @param type
* @param value
* @return
*/
private String formatValue(DataType type, Object value) {
if (type == DataType.VARCHAR || type == DataType.TEXT) {
return "'" + value.toString().replace("'", "''") + "'";
} else if (type == DataType.BIGINT) {
return value.toString();
} else if (type == DataType.INT) {
return value.toString();
} else if (type == DataType.DECIMAL) {
return value.toString();
} else if (type == DataType.DATETIME) {
return "'" + new java.sql.Date(((java.util.Date) value).getTime()) + "'";
} else if (type == DataType.DOUBLE) {
return value.toString();
} else {
// 其他类型的处理
return "'" + value.toString() + "'";
}
}
/**
*
* @param dataValues
* @param batchSize
* @return
*/
private List<DataValue[][]> splitData(DataValueModel[][] dataValues, int batchSize) {
List<DataValue[][]> batches = new ArrayList<>();
int totalSize = dataValues.length;
int numBatches = (int) Math.ceil((double) totalSize / batchSize);
for (int i = 0; i < numBatches; i++) {
int start = i * batchSize;
int end = Math.min(start + batchSize, totalSize);
DataValue[][] batch = new DataValue[end - start][];
System.arraycopy(dataValues, start, batch, 0, end - start);
batches.add(batch);
}
return batches;
}
} }