JAVA语言开发。VUE开发前端技术。支持SEO百度爬虫检索。
账号交易平台,支持分站。加价,商户入驻等功能。
游戏账号交易平台,是专门为网络游戏提供相关交易服务的电子商务平台,主要从事网络游戏账号的交易。 随着近年网络游戏产业的爆炸式增长,虚拟物品的交易需求也随之出现,为满足这部分需求,网游交易平台成为一种应运而生的新生事物而迅猛发展,相对应的游戏账号交易平台也应运而生,就像随着房地产业的快速发展,房地产中介也水涨船高一样。
game-account-trading-platform (游戏账号交易平台-电脑端PC)
介绍
游戏账号交易平台,是专门为网络游戏提供相关交易服务的电子商务平台,主要从事网络游戏账号的交易。 随着近年网络游戏产业的爆炸式增长,虚拟物品的交易需求也随之出现,为满足这部分需求,网游交易平台成为一种应运而生的新生事物而迅猛发展,相对应的游戏账号交易平台也应运而生,就像随着房地产业的快速发展,房地产中介也水涨船高一样。
软件架构
软件架构说明:包含电脑端PC,手机端H5,后台管理系统
安装教程
- 联系我wx: jackyu001,提供线上支持服务。
使用说明
- 安装简单,一键部署。支持21种游戏上号。以及发售。
- 支持游戏分站功能。
- 前后端分离,java提供后台接口支持。
/**
* MybatisPlusConfig插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
paginationInterceptor.setDialectType("mysql");
List<ISqlParser> sqlParserList = new ArrayList<>();
TenantSqlParser tenantSqlParser = new TenantSqlParser();
tenantSqlParser.setTenantHandler(new TenantHandler() {
/**
* true - where后面不添加storeId ,false - where后面添加storeId.true情况后续走getTenantId()方法
*/
@Override
public boolean doTableFilter(String tableName) {
if (tableName.startsWith("build") || tableName.startsWith("admin_") || tableName.startsWith("QRTZ_")) {
return true;
}
boolean isMatch = IGNORE_TENANT_TABLES_PORTAL.stream().anyMatch((e) -> e.equalsIgnoreCase(tableName));
if (!isMatch) {
// 1、获取该域名对应的商户storeId
WebSiteConf webSiteConf = queryWebSiteConf();
if (null == webSiteConf) {
return true;
}
Integer storeId = webSiteConf.getStoreId();
if (0 == storeId || null == storeId) {// 若配置表t_website_conf中store_id为空或者是0 ,则查询全部数据
return true;// 主站:不添加sotreId
} else {
// 2、查询商铺显示配置表:是否只显示个人分站商品
return queryShopShowConf(storeId);
}
}
return isMatch;
}
@Override
public Expression getTenantId() {
Integer storeId = null;// 租户ID
try {
WebSiteConf webSiteConf = queryWebSiteConf();
// 获取该域名对应的商户storeId
storeId = webSiteConf.getStoreId();
} catch (Exception e) {
log.error("根据请求地址判断storeId出错", e);
return null;
}
UserUtils.getCurrentMember().setStoreId(storeId);
log.info("current storeId:" + storeId);
return new LongValue(storeId);
}
/**
* 获取请求地址对应映射表信息:若是PC则根据web_url查询t_web_site_conf;若是H5则根据H5Url
*
* @return
*/
private WebSiteConf queryWebSiteConf() {
try {
WebSiteConf webSiteConf = null;
// 判断url中是否包含127.0.0.1,有则将url中内容替换成localhost
if (null == ServletUtils.getRequestAttributes()) {
return null;
}
HttpServletRequest request = ServletUtils.getRequest();
if (null == request) {
return null;
}
String url = request.getHeader("Referer");
if ("127.0.0.1".equals(URLUtil.getHost(URLUtil.url(url)).getHost())) {
url = url.replaceFirst("127.0.0.1", "localhost");
}
int start = url.indexOf("//") + 2;
int end = url.replace("//", "a").indexOf("/") + 1;
String webUrl = url.substring(start, end);
log.info("前端网址:" + webUrl + ";api请求地址:" + request.getRequestURL());
WebSiteConfServiceImpl iWebSiteConfService = SpringUtils.getBean(WebSiteConfServiceImpl.class);
WebSiteConf conf = new WebSiteConf();
conf.setIsEnable(1);
if (WebSiteConfUtil.isMobileDevice()) {
conf.setH5Url(webUrl);
webSiteConf = iWebSiteConfService.selectByUrl(conf);
} else {
conf.setWebUrl(webUrl);
webSiteConf = iWebSiteConfService.selectByUrl(conf);
}
if (null == webSiteConf) {
log.error("#webSiteConfi error : no config");
throw new RuntimeException("#webSiteConfig error.");
}
return webSiteConf;
} catch (Exception e) {
log.error("获取请求地址对应映射表信息出错", e);
throw new RuntimeException("#webSiteConfig is null error.");
}
}
/**
* true-显示全部 false-显示商户自己的商品
*
* @param storeId
* @return
*/
private boolean queryShopShowConf(Integer storeId) {
ShopShowConfServiceImpl shopShowConfService = SpringUtils.getBean(ShopShowConfServiceImpl.class);
ShopShowConf shopShowConf = shopShowConfService.getById(storeId);
if (null == shopShowConf) {
// 没有配置默认只显示商户下的商品
return true;
} else {
Integer isEnable = shopShowConf.getIsEnable();
// 0-不启用 1-只显示自己的商品 2-显示全部商品
if (isEnable == 1) {
return false;
} else if (isEnable == 2) {
return true;
} else {
return false;
}
}
}
@Override
public String getTenantIdColumn() {
return "store_id";
}
});
sqlParserList.add(tenantSqlParser);
paginationInterceptor.setSqlParserList(sqlParserList);
paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() {
@Override
public boolean doFilter(MetaObject metaObject) {
MappedStatement ms = SqlParserHelper.getMappedStatement(metaObject);
// 过滤自定义查询此时无租户信息约束
if ("com.ity965.mallplus.sys.mapper.SysUserMapper.selectByUserName".equals(ms.getId())) {
return true;
}
// 查询t_web_site_conf配置表,自查忽略
if ("com.ity965.mallplus.pms.mapper.WebSiteConfMapper.selectByUrl".equals(ms.getId())) {
return true;
}
return false;
}
});
return paginationInterceptor;
}