弹幕下载

master
10295 6 years ago
parent a84cded5b1
commit 9fbb9a6e42
  1. 2
      core/src/main/java/core/thrift/ThriftClientDemo.java
  2. 0
      core/src/main/resources/TestQry.thrift
  3. 39
      db/src/main/java/db/form/PageResult.java
  4. 6
      db/src/main/java/db/model/AbstractModel.java
  5. 9
      db/src/main/java/db/model/bilibili/MenuModel.java
  6. 13
      web/src/main/java/web/aop/Advice.java
  7. 1
      web/src/main/java/web/config/AppConfig.java
  8. 4
      web/src/main/java/web/config/SpringConfig.java
  9. 23
      web/src/main/java/web/controller/DataController.java
  10. 19
      web/src/main/java/web/controller/TableController.java
  11. 2
      web/src/main/java/web/model/DataModelForm.java
  12. 33
      web/src/main/java/web/service/BaseService.java
  13. 67
      web/src/main/java/web/service/DataService.java
  14. 9
      web/src/main/webapp/WEB-INF/jsp/form.jsp
  15. 10
      web/src/main/webapp/WEB-INF/jsp/table.jsp
  16. 26
      web/src/test/java/SpringTest.java

@ -21,7 +21,7 @@ public class ThriftClientDemo {
} }
private static TTransport getTTransport() throws Exception{ private static TTransport getTTransport() throws Exception{
try{ try{
TTransport tTransport = getTTransport("mikuhime.xyz", 2233, 5000); TTransport tTransport = getTTransport("sukura.top", 2233, 5000);
if(!tTransport.isOpen()){ if(!tTransport.isOpen()){
tTransport.open(); tTransport.open();
} }

@ -19,6 +19,9 @@ public class PageResult<T extends AbstractModel> {
private String errorMsg; private String errorMsg;
public PageResult() {
}
/** /**
* *
* @param count 总行数 * @param count 总行数
@ -41,38 +44,64 @@ public class PageResult<T extends AbstractModel> {
this.errorMsg = errorMsg; this.errorMsg = errorMsg;
} }
public PageResult() { public PageResult(int currentPage, int pageSize) {
this.currentPage = currentPage;
this.pageSize = pageSize;
} }
public long getCount() { public long getCount() {
return count; return count;
} }
public void setCount(long count) {
this.count = count;
}
public int getCurrentPage() { public int getCurrentPage() {
return currentPage; return currentPage;
} }
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public List<T> getDatas() { public List<T> getDatas() {
return datas; return datas;
} }
public Type getType() { public void setDatas(List<T> datas) {
return type; this.datas = datas;
} }
public int getPageSize() { public int getPageSize() {
return pageSize; return pageSize;
} }
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public long getPages() { public long getPages() {
return pages; return pages;
} }
public void setPages(long pages) {
this.pages = pages;
}
public Type getType() {
return type;
}
public void setType(Type type) {
this.type = type;
}
public String getErrorMsg() { public String getErrorMsg() {
return errorMsg; return errorMsg;
} }
public void setDatas(List<T> datas) { public void setErrorMsg(String errorMsg) {
this.datas = datas; this.errorMsg = errorMsg;
} }
} }

@ -1,9 +1,7 @@
package db.model; package db.model;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.serializer.SerializerFeature;
import core.util.ToJSON; import core.util.ToJSON;
import org.hibernate.criterion.DetachedCriteria;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
@ -23,10 +21,6 @@ public abstract class AbstractModel extends ToJSON {
return list; return list;
} }
@JSONField(serialize = false)
public DetachedCriteria getCriteria() {
return DetachedCriteria.forClass(this.getClass());
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends AbstractModel> T cast() throws ClassCastException{ public <T extends AbstractModel> T cast() throws ClassCastException{
return (T) this; return (T) this;

@ -2,9 +2,6 @@ package db.model.bilibili;
import db.annotation.Aliyun; import db.annotation.Aliyun;
import db.model.AbstractModel; import db.model.AbstractModel;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Property;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable; import java.io.Serializable;
@ -118,12 +115,6 @@ public class MenuModel extends AbstractModel {
this.menuLevel = menuLevel; this.menuLevel = menuLevel;
} }
@Override
@Transient
public DetachedCriteria getCriteria() {
return super.getCriteria().add(Property.forName("menuLevel").eq(0)).addOrder(Order.asc("sort"));
}
@Basic @Basic
@Column(name = "sort") @Column(name = "sort")
public int getSort() { public int getSort() {

@ -1,12 +1,9 @@
package web.aop; package web.aop;
import db.annotation.Model;
import db.config.HibernateConfig;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.springframework.aop.MethodBeforeAdvice; import org.springframework.aop.MethodBeforeAdvice;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import web.service.BaseService;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Arrays; import java.util.Arrays;
@ -20,14 +17,6 @@ public class Advice implements MethodBeforeAdvice {
@Override @Override
public void before(Method method, Object[] objects, Object o) { public void before(Method method, Object[] objects, Object o) {
log.info(method.getName()); log.info("类:" + o.getClass() + ",方法:" + method.getName() + "被调用,传入参数:" + Arrays.asList(objects));
if ("getHibernateTemplate".equals(method.getName())) {
BaseService baseService = (BaseService) o;
baseService.setHibernateTemplate(HibernateConfig.get(o.getClass().getAnnotation(Model.class).value()));
} else {
log.info("类:" + o.getClass() + ",方法:" + method.getName() + "被调用,传入参数:" + Arrays.asList(objects));
}
} }
} }

@ -11,7 +11,6 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableAspectJAutoProxy(proxyTargetClass = true) @EnableAspectJAutoProxy(proxyTargetClass = true)
@EnableTransactionManagement @EnableTransactionManagement
@PropertySource("classpath:config.properties") @PropertySource("classpath:config.properties")
//@ComponentScan({"db.config"})
@Import(HibernateConfig.class) @Import(HibernateConfig.class)
public class AppConfig { public class AppConfig {

@ -50,8 +50,4 @@ public class SpringConfig implements WebMvcConfigurer {
converters.add(fastJsonHttpMessageConverter); converters.add(fastJsonHttpMessageConverter);
} }
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
}
} }

@ -1,6 +1,7 @@
package web.controller; package web.controller;
import db.form.DBAction; import db.form.DBAction;
import db.form.PageResult;
import db.model.bilibili.DataModel; import db.model.bilibili.DataModel;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -11,16 +12,18 @@ import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import web.model.DataModelForm;
import web.service.DataService; import web.service.DataService;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.List;
@Controller @Controller
@RequestMapping("/data") @RequestMapping("/data")
public class DataController extends TableController<DataModel, web.model.DataModel,DataService> { public class DataController extends TableController<DataModel, DataModelForm,DataService> {
private final String regionJson=IOUtils.toString(DataController.class.getResourceAsStream("/region.json"), Charset.forName("UTF-8")); private final String regionJson=IOUtils.toString(DataController.class.getResourceAsStream("/region.json"), Charset.forName("UTF-8"));
@ -31,12 +34,12 @@ public class DataController extends TableController<DataModel, web.model.DataMod
@RequestMapping @RequestMapping
public String find(HttpSession session,Model model) { public String find(HttpSession session,Model model) {
session.setAttribute("regionJson",regionJson); session.setAttribute("regionJson",regionJson);
return super.find(model,new web.model.DataModel(),0,10); return super.find(model,new DataModelForm(),new PageResult(0,10));
} }
@RequestMapping("start/{size}") @RequestMapping("start/{size}")
public void start(@PathVariable Integer size){ public void start(@PathVariable Integer size){
stop(); stop();
service.start(size); service.start(size);
} }
@ -51,16 +54,22 @@ public class DataController extends TableController<DataModel, web.model.DataMod
} }
@Override @Override
protected DetachedCriteria getDetachedCriteria(web.model.DataModel queryCommand) { protected DetachedCriteria getDetachedCriteria(DataModelForm queryCommand) {
DetachedCriteria criteria= super.getDetachedCriteria(queryCommand); DetachedCriteria criteria= super.getDetachedCriteria(queryCommand);
if(StringUtils.isNotEmpty(queryCommand.getTitle())){ if(StringUtils.isNotEmpty(queryCommand.getTitle())){
criteria.add(Property.forName("title").like(queryCommand.getTitle(),MatchMode.ANYWHERE)); criteria.add(Property.forName("title").like(queryCommand.getTitle(),MatchMode.ANYWHERE));
} }
// if(queryCommand.getTypeIds()!=null){
// criteria.add(Property.forName("typeId").in(queryCommand.getTypeIds()));
// }
return criteria; return criteria;
} }
@Override
protected List find(DataModelForm command, Integer firstResult, Integer maxResults) {
return service.find(command, firstResult, maxResults);
}
@Override
protected long rowCount(DataModelForm command) {
return service.rowCount(command);
}
} }

@ -8,7 +8,6 @@ import org.springframework.dao.DataAccessException;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import web.service.BaseService; import web.service.BaseService;
import java.util.List; import java.util.List;
@ -17,17 +16,16 @@ public abstract class TableController<T extends AbstractModel,A extends T,E exte
@RequestMapping("table") @RequestMapping("table")
public String find(Model model,@ModelAttribute("command") A command, @RequestParam Integer firstResult, @RequestParam Integer maxResults){ public String find(Model model,@ModelAttribute("command") A command,PageResult pageResult){
DBAction action=DBAction.R; DBAction action=DBAction.R;
log.info(tableName+ "进行批量" + action.getCh() + "操作请求"); log.info(tableName+ "进行批量" + action.getCh() + "操作请求");
PageResult result; PageResult result;
if(checkAction(action)) { if(checkAction(action)) {
try { try {
Long rowCount=service.rowCount(getDetachedCriteria(command)); Long rowCount=rowCount(command);
if(rowCount>0) { if(rowCount>0) {
List list = service.find(getDetachedCriteria(command), firstResult*maxResults, maxResults); List list = find(command, pageResult.getCurrentPage()*pageResult.getPageSize(), pageResult.getPageSize());
result=new PageResult<T>(rowCount, pageResult.getCurrentPage(),list,pageResult.getPageSize() , Type.success);
result=new PageResult<T>(rowCount, firstResult,list,maxResults , Type.success);
}else{ }else{
result=new PageResult(Type.fail,"没有记录"); result=new PageResult(Type.fail,"没有记录");
} }
@ -47,4 +45,13 @@ public abstract class TableController<T extends AbstractModel,A extends T,E exte
protected boolean checkAction(DBAction action) { protected boolean checkAction(DBAction action) {
return false; return false;
} }
protected List find(A command, Integer firstResult,Integer maxResults){
return service.find(getDetachedCriteria(command), firstResult, maxResults);
}
protected long rowCount(A command){
return service.rowCount(getDetachedCriteria(command));
}
} }

@ -2,7 +2,7 @@ package web.model;
import java.util.List; import java.util.List;
public class DataModel extends db.model.bilibili.DataModel { public class DataModelForm extends db.model.bilibili.DataModel {
private List<Integer> typeIds; private List<Integer> typeIds;
public List<Integer> getTypeIds() { public List<Integer> getTypeIds() {

@ -1,5 +1,7 @@
package web.service; package web.service;
import db.annotation.Model;
import db.config.HibernateConfig;
import db.form.DBAction; import db.form.DBAction;
import db.model.AbstractModel; import db.model.AbstractModel;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
@ -19,16 +21,15 @@ public abstract class BaseService{
protected static Logger log=LogManager.getLogger(); protected static Logger log=LogManager.getLogger();
public HibernateTemplate hibernateTemplate; protected HibernateTemplate hibernateTemplate;
public HibernateTemplate getHibernateTemplate() { public final HibernateTemplate getHibernateTemplate() {
if(hibernateTemplate==null) {
hibernateTemplate=HibernateConfig.get(this.getClass().getAnnotation(Model.class).value());
}
return hibernateTemplate; return hibernateTemplate;
} }
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public final <T extends AbstractModel> T curd(DBAction action, T command) throws DataAccessException { public final <T extends AbstractModel> T curd(DBAction action, T command) throws DataAccessException {
switch (action) { switch (action) {
case C: case C:
@ -49,14 +50,26 @@ public abstract class BaseService{
} }
public List find(DetachedCriteria criteria, int firstResult, int maxResults){ public final List find(DetachedCriteria criteria, int firstResult,int maxResults){
return getHibernateTemplate().findByCriteria(criteria,firstResult,maxResults); return getHibernateTemplate().findByCriteria(criteria,firstResult,maxResults<getMaxResults()?maxResults:getMaxResults());
} }
/**
* 限制分页查询最大显示数
* @return
*/
protected int getMaxResults(){
return 100;
}
/**
public final Long rowCount(DetachedCriteria criteria){ * 根据查询条件统计记录数
* @param criteria
* @return
*/
public Long rowCount(DetachedCriteria criteria){
return getHibernateTemplate().executeWithNativeSession(session -> (Long) criteria.setProjection(Projections.rowCount()).getExecutableCriteria(session).uniqueResult()); return getHibernateTemplate().executeWithNativeSession(session -> (Long) criteria.setProjection(Projections.rowCount()).getExecutableCriteria(session).uniqueResult());
} }
} }

@ -10,9 +10,11 @@ import org.hibernate.Session;
import org.hibernate.query.NativeQuery; import org.hibernate.query.NativeQuery;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import web.model.DataModelForm;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.math.BigInteger;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@ -21,14 +23,14 @@ import java.util.concurrent.Future;
@Service @Service
@Model(HuaWeiCloud.class) @Model(HuaWeiCloud.class)
public class DataService extends BaseService{ public class DataService extends BaseService {
private ThreadPoolTaskExecutor executor; private ThreadPoolTaskExecutor executor;
private boolean isStop; private boolean isStop;
public void start(Integer threadSize){ public void start(Integer threadSize) {
isStop=false; isStop = false;
executor = new ThreadPoolTaskExecutor(); executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(threadSize); executor.setCorePoolSize(threadSize);
executor.setMaxPoolSize(threadSize); executor.setMaxPoolSize(threadSize);
@ -36,13 +38,13 @@ public class DataService extends BaseService{
executor.setWaitForTasksToCompleteOnShutdown(true); executor.setWaitForTasksToCompleteOnShutdown(true);
executor.initialize(); executor.initialize();
log.info("开始"); log.info("开始");
new Thread(()->{ new Thread(() -> {
getCid(threadSize); getCid(threadSize);
}).start(); }).start();
} }
public void stop(){ public void stop() {
if(executor!=null) { if (executor != null) {
executor.shutdown(); executor.shutdown();
isStop = true; isStop = true;
} }
@ -63,7 +65,7 @@ public class DataService extends BaseService{
} }
for (; i <= 15717791; ) { for (; i <= 15717791; ) {
if(isStop){ if (isStop) {
log.info("停止"); log.info("停止");
break; break;
} }
@ -75,8 +77,8 @@ public class DataService extends BaseService{
cid.add(i++); cid.add(i++);
} }
do { do {
Integer c=cid.poll(); Integer c = cid.poll();
if(c!=null) { if (c != null) {
try { try {
executor.execute(() -> { executor.execute(() -> {
save(c); save(c);
@ -120,10 +122,55 @@ public class DataService extends BaseService{
}); });
} }
}catch (Exception e){ } catch (Exception e) {
log.error(e); log.error(e);
} }
} }
public Long rowCount(DataModelForm form) {
StringBuffer sql=new StringBuffer();
if(form.getTypeIds()==null) {
sql.append("select count(*) from data");
}else{
union(sql,count,form.getTypeIds());
}
if (StringUtils.isNotEmpty(form.getTitle())) {
sql.append(" where title like '%").append(form.getTitle()).append("%'");
}
log.info(sql);
BigInteger count = getHibernateTemplate().execute(session -> (BigInteger) session.createNativeQuery(sql.toString()).getSingleResult());
return count.longValue();
}
private static final String union = "union all ";
private static final String tableAlise="A";
private static final String clazz_="1 as clazz_";
private static final String head = "select "+tableAlise+".*,"+clazz_+" from (";
private static final String count="select count(*) from (";
private void union(StringBuffer sql,String head,List<Integer> ids){
sql.append(head);
ids.forEach(id -> sql.append(union).append("select * from data_").append(id).append(" "));
sql.replace(0, head.length() + union.length(), head);
sql.append(") ").append(tableAlise);
}
public List find(DataModelForm form,Integer firstResult,Integer maxResults) {
StringBuffer sql = new StringBuffer();
if (form.getTypeIds() != null && !form.getTypeIds().isEmpty()) {
union(sql,head,form.getTypeIds());
} else {
sql.append("select *,").append(clazz_).append(" from data");
}
if (StringUtils.isNotEmpty(form.getTitle())) {
sql.append(" where title like '%").append(form.getTitle()).append("%'");
}
log.info(sql);
return getHibernateTemplate().execute(session -> session.createNativeQuery(sql.toString(),DataModel.class).setFirstResult(firstResult).setMaxResults(maxResults).getResultList());
}
} }

@ -98,14 +98,21 @@
}).prependTo("#queryDiv"); }).prependTo("#queryDiv");
}); });
<c:if test="${!empty command&&!empty command.typeIds}">
<c:forEach items="${command.typeIds}" var="typeId">
$('.dropdown-item[data-type=${typeId}]').click();
</c:forEach>
</c:if>
$('.input-group-prepend').on('click', 'i', function () { $('.input-group-prepend').on('click', 'i', function () {
$(this).parent().remove(); $(this).parent().remove();
$("#type" + $(this).data("type")).remove(); $("#type" + $(this).data("type")).remove();
$(".dropdown-item[data-type="+$(this).data("type")+"]").show();
}); });
$(".btn-secondary").click(function () { $(".btn-secondary").click(function () {
$("#pageForm").attr("action","/data/table?firstResult="+($(this).val()==''?0:$(this).val())+"&maxResults=${datas.pageSize}").submit(); $("#pageForm").attr("action","/data/table?currentPage="+($(this).val()==''?0:$(this).val())+"&pageSize=${datas.pageSize}").submit();
}); });

@ -19,11 +19,11 @@
<table class="table"> <table class="table">
<thead> <thead>
<tr> <tr>
<th scope="col">cid</th> <th>cid</th>
<th scope="col">aid</th> <th>aid</th>
<th scope="col">title</th> <th>title</th>
<th scope="col">subtitle</th> <th>subtitle</th>
<th scope="col">author</th> <th>author</th>
</tr> </tr>
</thead> </thead>

@ -1,10 +1,6 @@
import db.model.bilibili.DataModel;
import db.util.ExportUtil; import db.util.ExportUtil;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projections;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@ -23,9 +19,12 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.WebApplicationContext;
import web.config.AppConfig; import web.config.AppConfig;
import web.config.SpringConfig; import web.config.SpringConfig;
import web.model.DataModelForm;
import web.service.BiliService;
import web.service.DataService; import web.service.DataService;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
//让测试运行于Spring环境 //让测试运行于Spring环境
@RunWith(SpringJUnit4ClassRunner.class) @RunWith(SpringJUnit4ClassRunner.class)
@ -45,6 +44,9 @@ public class SpringTest {
@Autowired @Autowired
private DataService dataService; private DataService dataService;
@Autowired
private BiliService biliService;
@Autowired @Autowired
@Qualifier("Hweb.service.DataService") @Qualifier("Hweb.service.DataService")
private HibernateTemplate template1; private HibernateTemplate template1;
@ -75,9 +77,13 @@ public class SpringTest {
@Test @Test
public void test3() { public void test3() {
// 查询总条数 // 查询总条数
Class c=DataModel.DataModel1.class; // log.info("记录数:"+dataService.rowCount(DetachedCriteria.forClass(DataModel.class)));
Long count = template1.executeWithNativeSession((Session session) -> (Long) DetachedCriteria.forClass(c).setProjection(Projections.rowCount()).getExecutableCriteria(session).uniqueResult());
log.info("记录数:"+count); // log.info(dataService.rowCount(null));
DataModelForm form=new DataModelForm();
form.setTypeIds(new ArrayList<Integer>(){{add(32);add(33);}});
long c=dataService.rowCount(form);
log.info(c);
} }
@Test @Test
@ -86,7 +92,11 @@ public class SpringTest {
sql.exportType(); sql.exportType();
} }
@Test
public void test5(){
dataService.getHibernateTemplate();
biliService.getHibernateTemplate();
}
} }

Loading…
Cancel
Save