fix: 优化重排序操作
This commit is contained in:
12
.idea/dataSources.xml
generated
12
.idea/dataSources.xml
generated
@@ -13,5 +13,17 @@
|
|||||||
</jdbc-additional-properties>
|
</jdbc-additional-properties>
|
||||||
<working-dir>$ProjectFileDir$</working-dir>
|
<working-dir>$ProjectFileDir$</working-dir>
|
||||||
</data-source>
|
</data-source>
|
||||||
|
<data-source source="LOCAL" name="bookstore@mysql.lanyuanxiaoyao.com" uuid="7f28761d-62cd-4d02-9327-17e107b432ac">
|
||||||
|
<driver-ref>mysql.8</driver-ref>
|
||||||
|
<synchronize>true</synchronize>
|
||||||
|
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
|
||||||
|
<jdbc-url>jdbc:mysql://mysql.lanyuanxiaoyao.com:43780/bookstore</jdbc-url>
|
||||||
|
<jdbc-additional-properties>
|
||||||
|
<property name="com.intellij.clouds.kubernetes.db.host.port" />
|
||||||
|
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
|
||||||
|
<property name="com.intellij.clouds.kubernetes.db.container.port" />
|
||||||
|
</jdbc-additional-properties>
|
||||||
|
<working-dir>$ProjectFileDir$</working-dir>
|
||||||
|
</data-source>
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
6
.idea/data_source_mapping.xml
generated
Normal file
6
.idea/data_source_mapping.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DataSourcePerFileMappings">
|
||||||
|
<file url="file://$APPLICATION_CONFIG_DIR$/consoles/db/7f28761d-62cd-4d02-9327-17e107b432ac/console.sql" value="7f28761d-62cd-4d02-9327-17e107b432ac" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -62,7 +62,7 @@ function Chapter() {
|
|||||||
actionType: 'ajax',
|
actionType: 'ajax',
|
||||||
tooltip: '序号重排',
|
tooltip: '序号重排',
|
||||||
tooltipPlacement: 'top',
|
tooltipPlacement: 'top',
|
||||||
api: `get:${commonInfo.baseUrl}/line/generate_sequence`
|
api: `get:${commonInfo.baseUrl}/line/generate_sequence/${id}`
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,10 +1,23 @@
|
|||||||
package com.lanyuanxiaoyao.bookstore;
|
package com.lanyuanxiaoyao.bookstore;
|
||||||
|
|
||||||
|
import cn.hutool.core.lang.Tuple;
|
||||||
|
import cn.hutool.core.text.csv.CsvUtil;
|
||||||
|
import cn.hutool.core.util.NumberUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.blinkfox.fenix.EnableFenix;
|
import com.blinkfox.fenix.EnableFenix;
|
||||||
|
import com.lanyuanxiaoyao.bookstore.entity.Chapter;
|
||||||
|
import com.lanyuanxiaoyao.bookstore.entity.Line;
|
||||||
|
import com.lanyuanxiaoyao.bookstore.service.BookService;
|
||||||
|
import com.lanyuanxiaoyao.bookstore.service.ChapterService;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
|
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 启动类
|
* 启动类
|
||||||
@@ -20,4 +33,44 @@ public class BookStoreApplication {
|
|||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
SpringApplication.run(BookStoreApplication.class, args);
|
SpringApplication.run(BookStoreApplication.class, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private BookService bookService;
|
||||||
|
@Resource
|
||||||
|
private ChapterService chapterService;
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Throwable.class)
|
||||||
|
// @EventListener(ApplicationReadyEvent.class)
|
||||||
|
public void loadOldData() throws FileNotFoundException {
|
||||||
|
var reader = CsvUtil.getReader(new FileReader("C:\\Users\\lanyuanxiaoyao\\Result_6.csv"));
|
||||||
|
var rows = reader.stream()
|
||||||
|
.map(row -> new Row(Long.parseLong(row.get(0)), row.get(1), Long.parseLong(row.get(2)), row.get(3)))
|
||||||
|
.toList();
|
||||||
|
var book = bookService.detailOrThrow(3602572744994816L);
|
||||||
|
rows.stream()
|
||||||
|
.map(row -> new Tuple(row.chapterSequence(), row.chapterTitle()))
|
||||||
|
.distinct()
|
||||||
|
.forEach(tuple -> {
|
||||||
|
var chapter = new Chapter();
|
||||||
|
chapter.setSequence(NumberUtil.toDouble(tuple.get(0)));
|
||||||
|
chapter.setName(tuple.get(1));
|
||||||
|
chapter.setBook(book);
|
||||||
|
|
||||||
|
var lines = rows.stream()
|
||||||
|
.filter(row -> ObjectUtil.equals(row.chapterSequence(), tuple.get(0)) && ObjectUtil.equals(row.chapterTitle(), tuple.get(1)))
|
||||||
|
.map(row -> {
|
||||||
|
var line = new Line();
|
||||||
|
line.setSequence(NumberUtil.toDouble(row.lineSequence()));
|
||||||
|
line.setText(row.lineText());
|
||||||
|
line.setChapter(chapter);
|
||||||
|
return line;
|
||||||
|
})
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
chapter.setContent(lines);
|
||||||
|
chapterService.save(chapter);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public record Row(long chapterSequence, String chapterTitle, long lineSequence, String lineText) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ public class ChapterController extends SimpleControllerSupport<Chapter, ChapterC
|
|||||||
|
|
||||||
public record DetailItem(
|
public record DetailItem(
|
||||||
Long id,
|
Long id,
|
||||||
Long sequence,
|
Double sequence,
|
||||||
String name,
|
String name,
|
||||||
String description,
|
String description,
|
||||||
LocalDateTime createdTime,
|
LocalDateTime createdTime,
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.lanyuanxiaoyao.service.template.controller.SimpleControllerSupport;
|
|||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
@@ -29,9 +30,9 @@ public class LineController extends SimpleControllerSupport<Line, LineController
|
|||||||
return GlobalResponse.responseSuccess();
|
return GlobalResponse.responseSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("generate_sequence")
|
@GetMapping("generate_sequence/{chapter_id}")
|
||||||
public GlobalResponse<Object> generateSequence() {
|
public GlobalResponse<Object> generateSequence(@PathVariable("chapter_id") Long chapterId) {
|
||||||
lineService.generateSequence();
|
lineService.generateSequence(chapterId);
|
||||||
return GlobalResponse.responseSuccess();
|
return GlobalResponse.responseSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,7 +78,7 @@ public class LineController extends SimpleControllerSupport<Line, LineController
|
|||||||
|
|
||||||
public record DetailItem(
|
public record DetailItem(
|
||||||
Long id,
|
Long id,
|
||||||
Long sequence,
|
Double sequence,
|
||||||
String text
|
String text
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener;
|
|||||||
@Table(name = Constants.DATABASE_PREFIX + "chapter")
|
@Table(name = Constants.DATABASE_PREFIX + "chapter")
|
||||||
public class Chapter extends SimpleEntity {
|
public class Chapter extends SimpleEntity {
|
||||||
@Column(nullable = false)
|
@Column(nullable = false)
|
||||||
private Long sequence;
|
private Double sequence;
|
||||||
@Column(nullable = false)
|
@Column(nullable = false)
|
||||||
private String name;
|
private String name;
|
||||||
private String description;
|
private String description;
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener;
|
|||||||
@Table(name = Constants.DATABASE_PREFIX + "line")
|
@Table(name = Constants.DATABASE_PREFIX + "line")
|
||||||
public class Line extends SimpleEntity {
|
public class Line extends SimpleEntity {
|
||||||
@Column(nullable = false)
|
@Column(nullable = false)
|
||||||
private Long sequence;
|
private Double sequence;
|
||||||
@Lob
|
@Lob
|
||||||
@Basic(fetch = FetchType.LAZY)
|
@Basic(fetch = FetchType.LAZY)
|
||||||
@ToString.Exclude
|
@ToString.Exclude
|
||||||
|
|||||||
@@ -9,6 +9,6 @@ import org.springframework.stereotype.Repository;
|
|||||||
@Repository
|
@Repository
|
||||||
public interface ChapterRepository extends SimpleRepository<Chapter> {
|
public interface ChapterRepository extends SimpleRepository<Chapter> {
|
||||||
@Query("select max(chapter.sequence) from Chapter chapter")
|
@Query("select max(chapter.sequence) from Chapter chapter")
|
||||||
Optional<Long> findMaxSequence(Long bookId);
|
Optional<Double> findMaxSequence(Long bookId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.lanyuanxiaoyao.bookstore.service;
|
package com.lanyuanxiaoyao.bookstore.service;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.NumberUtil;
|
||||||
import com.lanyuanxiaoyao.bookstore.entity.Chapter;
|
import com.lanyuanxiaoyao.bookstore.entity.Chapter;
|
||||||
import com.lanyuanxiaoyao.bookstore.entity.vo.Option;
|
import com.lanyuanxiaoyao.bookstore.entity.vo.Option;
|
||||||
import com.lanyuanxiaoyao.bookstore.repository.ChapterRepository;
|
import com.lanyuanxiaoyao.bookstore.repository.ChapterRepository;
|
||||||
@@ -26,14 +27,14 @@ public class ChapterService extends SimpleServiceSupport<Chapter> {
|
|||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long latestSequence(Long bookId) {
|
public Double latestSequence(Long bookId) {
|
||||||
return chapterRepository.findMaxSequence(bookId).orElse(0L);
|
return chapterRepository.findMaxSequence(bookId).orElse(0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generateSequence() {
|
public void generateSequence() {
|
||||||
var chapters = chapterRepository.findAll(Sort.by(Sort.Direction.ASC, Chapter.Fields.sequence));
|
var chapters = chapterRepository.findAll(Sort.by(Sort.Direction.ASC, Chapter.Fields.sequence));
|
||||||
for (int index = 0; index < chapters.size(); index++) {
|
for (int index = 0; index < chapters.size(); index++) {
|
||||||
chapters.get(index).setSequence((long) index);
|
chapters.get(index).setSequence(NumberUtil.toDouble(index));
|
||||||
}
|
}
|
||||||
chapterRepository.saveAll(chapters);
|
chapterRepository.saveAll(chapters);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
package com.lanyuanxiaoyao.bookstore.service;
|
package com.lanyuanxiaoyao.bookstore.service;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.NumberUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.lanyuanxiaoyao.bookstore.entity.Line;
|
import com.lanyuanxiaoyao.bookstore.entity.Line;
|
||||||
|
import com.lanyuanxiaoyao.bookstore.entity.QLine;
|
||||||
import com.lanyuanxiaoyao.bookstore.repository.LineRepository;
|
import com.lanyuanxiaoyao.bookstore.repository.LineRepository;
|
||||||
import com.lanyuanxiaoyao.service.template.entity.IdOnlyEntity;
|
import com.lanyuanxiaoyao.service.template.entity.IdOnlyEntity;
|
||||||
import com.lanyuanxiaoyao.service.template.service.SimpleServiceSupport;
|
import com.lanyuanxiaoyao.service.template.service.SimpleServiceSupport;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.data.domain.Sort;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@@ -34,7 +35,7 @@ public class LineService extends SimpleServiceSupport<Line> {
|
|||||||
.toList();
|
.toList();
|
||||||
for (int index = 0; index < lines.size(); index++) {
|
for (int index = 0; index < lines.size(); index++) {
|
||||||
var line = new Line();
|
var line = new Line();
|
||||||
line.setSequence((long) index);
|
line.setSequence(NumberUtil.toDouble(index));
|
||||||
line.setText(lines.get(index));
|
line.setText(lines.get(index));
|
||||||
line.setChapter(chapter);
|
line.setChapter(chapter);
|
||||||
lineRepository.save(line);
|
lineRepository.save(line);
|
||||||
@@ -47,10 +48,13 @@ public class LineService extends SimpleServiceSupport<Line> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(rollbackFor = Throwable.class)
|
@Transactional(rollbackFor = Throwable.class)
|
||||||
public void generateSequence() {
|
public void generateSequence(Long chapterId) {
|
||||||
var lines = lineRepository.findAll(Sort.by(Sort.Direction.ASC, Line.Fields.sequence));
|
var lines = lineRepository.findAll(
|
||||||
|
QLine.line.chapter().id.eq(chapterId),
|
||||||
|
QLine.line.sequence.asc()
|
||||||
|
);
|
||||||
for (int index = 0; index < lines.size(); index++) {
|
for (int index = 0; index < lines.size(); index++) {
|
||||||
lines.get(index).setSequence((long) index);
|
lines.get(index).setSequence(NumberUtil.toDouble(index));
|
||||||
}
|
}
|
||||||
lineRepository.saveAll(lines);
|
lineRepository.saveAll(lines);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user