idc
All checks were successful
/ build-image (push) Successful in 1m47s

This commit is contained in:
d 2024-10-01 14:07:28 +08:00
parent b32de0ba2f
commit de110b66bd
9 changed files with 226 additions and 102 deletions

14
pom.xml
View File

@ -99,10 +99,20 @@
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!--<dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-integration</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>-->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>

View File

@ -30,6 +30,7 @@ import com.microsoft.playwright.options.RequestOptions;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import jj.tech.paolu.biz.webadmin.service.G24Service;
import jj.tech.paolu.biz.webadmin.service.Idc9998Sevice;
import jj.tech.paolu.config.enums.Games;
import jj.tech.paolu.repository.mybatis.dao.Idc9998AdminInfoMapper;
@ -54,6 +55,7 @@ public class Hgt8Component{
@Autowired Idc9998Sevice idc9998Sevice;
@Autowired Idc9998AdminInfoMapper idc9998AdminInfoMapper;
@Autowired G24Service g24Service;
@Value("${idc9998.headless}")
public void setHeadless(Boolean headless){
@ -78,8 +80,8 @@ public class Hgt8Component{
.setSlowMo(200)
);
Idc9998AdminInfo admin = idc9998Sevice.getByUserName("bk7897");
this.addInstance(admin.getUser_name());
// Idc9998AdminInfo admin = idc9998Sevice.getByUserName("bk7897");
// this.addInstance(admin.getUser_name());
logger.info("playwright started");
}
@ -111,6 +113,7 @@ public class Hgt8Component{
inst.admin = bean;
inst.idc9998Sevice = this.idc9998Sevice;
inst.idc9998AdminInfoMapper = this.idc9998AdminInfoMapper;
inst.g24Service = this.g24Service;
Hgt8Component.instances.put(userName, inst);
return inst;
}else {
@ -174,6 +177,7 @@ public class Hgt8Component{
YMHttp.customApi(Base64.encodeBase64String(image_bytes));
JsonNode code_num = root.get("data").get("data");
ifr_main.getByTestId("userName").fill(this.admin.getUser_name());
this.page.waitForTimeout(1_500);
ifr_main.getByTestId("password").fill(this.admin.getUser_password());
ifr_main.getByTestId("code").fill(code_num.asText());
this.page.waitForTimeout(5_500); //wait 2500
@ -190,41 +194,22 @@ public class Hgt8Component{
ifr_main.getByTestId("tc_Close")
.click();
this.page.frameLocator("#ifr_main")
.locator("xpath=//input[@class='protocol-btn-y']")
.click();
//及时注单
this.page.frameLocator("#ifr_main")
.locator("#jishi-order")
.click();
Response s = page.waitForResponse(resp -> {
System.err.println(resp.url());
if(resp.status() == 200 ) {
return true;
}else {
return false;
}
},
() -> {
System.out.println("所有返回相应");
}
);
//this.G_24_Curr().join();
//更新用户登录状态
String loginInfo = this.aPIRequestContext.storageState();
// String loginInfo = this.aPIRequestContext.storageState();
// idc9998Sevice.updateLoginInfo(this.admin.getUser_name(), loginInfo, 1);
// this.admin.setIs_online(1);
// this.admin.setLogin_info(loginInfo);
//关闭弹窗
//ifr_main.getByTestId("tc_Close")
//.click();
return true;
@ -237,34 +222,39 @@ public class Hgt8Component{
public CompletableFuture<Response> G_24_Curr() {
CompletableFuture<Response> future = CompletableFuture.supplyAsync(() -> {
Response response = page.waitForResponse(resp -> {
System.err.println(resp.url());
if(resp.status() == 200 ) {
return true;
}else {
return false;
}
},
() -> {
System.out.println("所有返回相应");
}
Response response = this.page.waitForResponse(resp ->
{
//System.err.println(resp.url());
String g24curr_url = this.admin.getDomain()+"/wb2/jd001/m018";
if(resp.status() == 200 && g24curr_url.equals(resp.url())) {
return true;
}else {
return false;
}
},
() -> {
//System.out.println("所有返回响应");
}
);
g24Service.getCurretG24Data(response.text());
return response;
});
return future.handleAsync((Response re, Throwable ex) -> {
if(ex != null) {
ex.printStackTrace();
wrong_times.getAndIncrement();
if(wrong_times.get()>3) {
return future;
logger.error(ex.getMessage());
this.wrong_times.getAndIncrement();
if(this.wrong_times.get()>3) {
return CompletableFuture.completedFuture(re);
}
return G_24_Curr();
} else {
this.wrong_times = new AtomicInteger(0);
return G_24_Curr();
}
})
.thenCompose(Function.identity());

View File

@ -2,8 +2,11 @@ package jj.tech.paolu.biz.webadmin.controller;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.integration.jdbc.lock.JdbcLockRegistry;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -26,7 +29,7 @@ import jj.tech.paolu.utils.R;
@RequestMapping(value = "/op/idc9998",name = "游戏报告列表")
@Tag(name = "Idc9998Controller", description = "游戏报告列表")
public class Idc9998Controller {
@Autowired JdbcLockRegistry jdbcLockRegistry;
@Autowired CurrentG24Mapper currentG24Mapper;
@Autowired HistoryG24Mapper historyG24Mapper;
@ -73,10 +76,25 @@ public class Idc9998Controller {
//// Idc9998AdminInfo admin = idc9998Sevice.getByUserName("bk7897");
// hgt8Component.getInstance("bk7897").login();
//
// return R.FALSE("无法找到该游戏数据");
// return R.FALSE("");
//
// }
@Operation(summary = "test lock")
@PostMapping("/lock")
public Object lock() throws Exception {
Lock lock = jdbcLockRegistry.obtain("account-lock");
if (lock.tryLock()) {
System.out.println("拿到锁");
} else {
System.out.println("拿不到锁");
}
return R.FALSE("");
}
}

View File

@ -5,6 +5,8 @@ import static org.mybatis.dynamic.sql.SqlBuilder.*;
import java.time.LocalDateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -14,6 +16,7 @@ import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import jj.tech.paolu.biz.webadmin.component.Hgt8Component;
import jj.tech.paolu.repository.mybatis.dao.CurrentG24Mapper;
import jj.tech.paolu.repository.mybatis.dao.HistoryG24Mapper;
import jj.tech.paolu.repository.mybatis.dao.support.HistoryG24DynamicSqlSupport;
@ -23,6 +26,7 @@ import jj.tech.paolu.utils.IDHelp;
@Service
public class G24Service {
private static Logger logger = LoggerFactory.getLogger(G24Service.class);
@Autowired CurrentG24Mapper currentG24Mapper;
@Autowired HistoryG24Mapper historyG24Mapper;
@ -80,6 +84,7 @@ public class G24Service {
}
} catch (Exception e) {
logger.error(e.getMessage());
throw new RuntimeException(e);
}

View File

@ -0,0 +1,24 @@
package jj.tech.paolu.config.lock;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.jdbc.lock.DefaultLockRepository;
import org.springframework.integration.jdbc.lock.JdbcLockRegistry;
import org.springframework.integration.jdbc.lock.LockRepository;
@Configuration
public class LockRegistryConfiguration {
@Bean
public DefaultLockRepository defaultLockRepository(DataSource dataSource){
return new DefaultLockRepository(dataSource); //DefaultLockRepository.setTimeToLive(1000 * 100);
}
@Bean
public JdbcLockRegistry jdbcLockRegistry(DefaultLockRepository lockRepository){
return new JdbcLockRegistry(lockRepository);
}
}

View File

@ -1,16 +0,0 @@
//package jj.tech.paolu.config.start;
//
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import jj.tech.paolu.biz.webadmin.component.Hgt8Component;
//
//@Configuration
//public class StartCloseConfig {
//
// @Bean
// public Hgt8Component messageProcessor() {
// return new Hgt8Component();
// }
//
//}

View File

@ -1,43 +1,124 @@
//package jj.tech.paolu.task;
package jj.tech.paolu.task;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.integration.jdbc.lock.JdbcLockRegistry;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import jj.tech.paolu.biz.webadmin.component.Hgt8Component;
import jj.tech.paolu.biz.webadmin.service.Idc9998Sevice;
import jj.tech.paolu.repository.mybatis.dao.Idc9998AdminInfoMapper;
import jj.tech.paolu.repository.mybatis.entity.Idc9998AdminInfo;
import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
@Component
public class Hgt8Timer {
private static Logger logger = LoggerFactory.getLogger(Hgt8Timer.class);
@Autowired Idc9998Sevice idc9998Sevice;
@Autowired Idc9998AdminInfoMapper idc9998AdminInfoMapper;
@Autowired Hgt8Component hgt8Component;
@Autowired JdbcLockRegistry jdbcLockRegistry;
//@Scheduled(cron = "0/180 * * * * ?")//60s
@Scheduled(fixedDelay = 180) //上一次执行完毕之后,执行的时间间隔
public void login() {
Lock lock = jdbcLockRegistry.obtain("login");
if(lock.tryLock()) {
Idc9998AdminInfo admin = idc9998Sevice.getByUserName("bk7897");
if(admin != null && admin.getIs_online() != 1) {
Boolean login_ok =
hgt8Component
.addInstance(admin.getUser_name())
.forceLogin();
if(login_ok) {
//更新用户登录状态
String loginInfo = hgt8Component.addInstance(admin.getUser_name()).aPIRequestContext.storageState();
idc9998Sevice.updateLoginInfo(hgt8Component.addInstance(admin.getUser_name()).admin.getUser_name(), loginInfo, 1);
hgt8Component.addInstance(admin.getUser_name()).admin.setIs_online(1);
hgt8Component.addInstance(admin.getUser_name()).admin.setLogin_info(loginInfo);
}
}
lock.unlock();
}
}
@Scheduled(fixedDelay=60)
public void isLogin() {
Lock lock = jdbcLockRegistry.obtain("login");
if(lock.tryLock()) {
Hgt8Component bk = hgt8Component.getInstance("bk7897");
if(bk!=null && bk.admin!=null) {
Boolean isLogin = bk.page.frameLocator("#ifr_main").locator("#jishi-order").isVisible();
if(!isLogin) {
bk.admin.setIs_online(0);
idc9998Sevice.updateLoginInfo("bk7897", bk.aPIRequestContext.storageState(), 0);
}
}
lock.unlock();
}
}
@Scheduled(cron = "0/60 * * * * ?")//5秒
public void get_g21_curr() {
Lock lock = jdbcLockRegistry.obtain("get_g21_curr");
if(lock.tryLock()) {
Hgt8Component bk = hgt8Component.getInstance("bk7897");
if(bk.admin.getIs_online()==1) {
bk.wrong_times=new AtomicInteger(0);
bk.G_24_Curr().join();
}
lock.unlock();
}
}
// //@Scheduled(cron = "0/60 * * * * ?")//5秒
// @Scheduled(initialDelay = 1000 * 3, fixedDelay=Long.MAX_VALUE)
// public void get_g21_curr() {
//
//import java.time.LocalDate;
//import java.time.format.DateTimeFormatter;
// Lock lock = jdbcLockRegistry.obtain("get_g21_curr");
// if(lock.tryLock()) {
// Hgt8Component bk = hgt8Component.getInstance("bk7897");
// if(bk==null || bk.admin==null) {
// idc9998Sevice.updateIsOnline("bk7897", 0);
// lock.unlock();
// return;
// }
// if(bk.admin.getIs_online()==1) {
// //bk.wrong_times=new AtomicInteger(0);
// bk.G_24_Curr().join();
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//// bk.admin.setIs_online(0);
//// idc9998Sevice.updateIsOnline("bk7897", 0);
//
//import jj.tech.paolu.biz.webadmin.component.Hgt8Component;
//import jj.tech.paolu.biz.webadmin.service.Idc9998Sevice;
//import jj.tech.paolu.repository.mybatis.dao.Idc9998AdminInfoMapper;
//import jj.tech.paolu.repository.mybatis.entity.Idc9998AdminInfo;
//
//@Component
//public class Hgt8Timer {
// private static Logger logger = LoggerFactory.getLogger(Hgt8Timer.class);
//
// @Autowired Idc9998Sevice idc9998Sevice;
// @Autowired Idc9998AdminInfoMapper idc9998AdminInfoMapper;
// @Autowired Hgt8Component hgt8Component;
//
// @Scheduled(cron = "0/180 * * * * ?")//60s
// public void login() {
// Idc9998AdminInfo admin =
// idc9998Sevice.getByUserName("bk7897");
// if(admin != null && admin.getIs_online() != 1) {
//
// hgt8Component.addInstance(admin.getUser_name())
// .forceLogin();
//
// }else {
// hgt8Component.addInstance(admin.getUser_name());
// }
// lock.unlock();
// }
// }
//
// }
// @Scheduled(cron = "0/20 * * * * ?")//5秒
// public void get_g21() {
// public void get_g21_his() {
// try {
//
// Hgt8Component bk = hgt8Component.getInstance("bk7897");
@ -52,7 +133,7 @@
// }
//
// }
//
//
//
//}
}

View File

@ -99,6 +99,8 @@ logging:
root: info
org.jooq: info
org.springframework.amqp: info
org.springframework.integration: debug
org.mybatis: debug
org.mybatis.dynamic.sql: debug
jj.tech.paolu: debug

View File

@ -181,3 +181,13 @@ create table history_g24 (
unique (newIssue)
);
drop table if exists INT_LOCK;
CREATE TABLE INT_LOCK (
LOCK_KEY CHAR(36) NOT NULL,
REGION VARCHAR(100) NOT NULL,
CLIENT_ID CHAR(36),
CREATED_DATE DATETIME(6) NOT NULL,
constraint INT_LOCK_PK primary key (LOCK_KEY, REGION)
) ENGINE=InnoDB;