我们要根据用户比赛信息,算出各种计算结果,比如攻击力,防御力,得分比,战绩之类的,并插入用户数据,公式如下,经过思考,我做了基础表,通过查数来计算二级表,将二级表存入数据库,从数据库取出二级表的已知条件算出三级表的最终数据
依据如下公式来算出个组数据
基础表
新对手表
每场比赛都会返回的数据
每个赛季每种比赛类型都会返回的表数据,有点类似王者农药那种
不分赛季部分比赛类型的表
至于代码:逆向工程先生成domain dao 以及xml文件,在resources底下
新建一个xml文件写入以下代码。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
<classPathEntry
location="C:/Users/Administrator/.m2/repository/mysql/mysql-connector-java/5.1.31/mysql-connector-java-5.1.31.jar"/>
<context id="context1">
<plugin type="org.mybatis.generator.plugins.CaseInsensitiveLikePlugin"></plugin>
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
<!-- Pagination -->
<plugin type="com.yuyuka.billiards.mysql.generator.MySQLLimitPlugin"></plugin>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://xxx.xxx.xxx.xxxx:3306/billiards?useUnicode=true"
userId="root" password="1234"/>
<javaModelGenerator targetPackage="com.yuyuka.billiards.service.domain"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<sqlMapGenerator targetPackage="com.yuyuka.billiards.service.dao"
targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.yuyuka.billiards.service.dao"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--<table tableName="BILLIARDS_ASSISTANCE_MAN" domainObjectName="BilliardsAssistanceMan" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_ASSISTANCE_MAN_APPRECIATE" domainObjectName="BilliardsAssisTanceManAppreciate" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_ASSISTANCE_MAN_IMAGES" domainObjectName="BilliardsAssisTanceManImages" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_ASSISTANT_IMAGES" domainObjectName="BilliardsAssisTantImages" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_ASSISTANT_INFO" domainObjectName="BilliardsAssisTantInfo" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_CITY_CODE" domainObjectName="BilliardsCityCode" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_CONSULTATION" domainObjectName="BilliardsConsultation" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_CONSULTATION_TAG" domainObjectName="BilliardsConsultationTag" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_CONSULTATION_MESSAGE" domainObjectName="BilliardsConsultationMessage" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_CONSULTATION_TAG_CONFIG" domainObjectName="BilliardsConsultationTagConfig" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_CONSULTATION_HOT_SUBTRACTION" domainObjectName="BilliardsConsultationHotSubtraction" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_CONSULTATION_MESSAGE_REPLY" domainObjectName="BilliardsConsultationMessageReply" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_CONSULTATION_THUMBSUP" domainObjectName="BilliardsConsultationThumbsup" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_CRIPPLE" domainObjectName="BilliardsCripple" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_CRIPPLE_INFO" domainObjectName="BilliardsCrippleInfo" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_GAME_TYPE" domainObjectName="BilliardsGameType" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_GOODS" domainObjectName="BilliardsGoods" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_COST_RULES" domainObjectName="BilliardsCostRules" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_PROMOTION_RULES" domainObjectName="BilliardsPromotionRules" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_RESERVE_RULES" domainObjectName="BilliardsReserveRules" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_POOL_TABLE" domainObjectName="BilliardsPoolTable" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_WX_TRANSACTION_INFO" domainObjectName="BilliardsWxTransactionInfo" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_INFO_DATE_RULES" domainObjectName="BilliardsInfoDateRules" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_IMAGES" domainObjectName="BilliardsImages" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_INFO" domainObjectName="BilliardsInfo" selectByExampleQueryId="true" />-->
<!-- <table tableName="BILLIARDS_MAKE_APP_ORDER" domainObjectName="BilliardsMakeAppOrder" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_MAKE_APP_ORDER_CHANGE" domainObjectName="BilliardsMakeAppOrderChange" selectByExampleQueryId="true" />-->
<!-- <table tableName="BILLIARDS_MAKE_APP_ORDER_INFO" domainObjectName="BilliardsMakeAppOrderInfo" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_MATCH_BONUS" domainObjectName="BilliardsMatchBonus" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_MATCH_CONFRONTATION_INFO" domainObjectName="BilliardsMatchconfrontationInfo" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_MATCH_IMAGES" domainObjectName="BilliardsMatchImages" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_MATCH_INFO" domainObjectName="BilliardsMatchInfo" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_MATCH_RESULT" domainObjectName="BilliardsMatchResult" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_MATCH_SCENE" domainObjectName="BilliardsMatchScene" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_MATCH_SING_UP" domainObjectName="BilliardsMatchSingup" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_PLATFORM_ACCOUNT" domainObjectName="BilliardsPlatformAccount" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_PROMOTION" domainObjectName="BilliardsPromotion" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_ROLE" domainObjectName="BilliardsRole" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_ROOM_LIST" domainObjectName="BilliardsRoomList" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_SECOND_MALL" domainObjectName="BilliardsSecondMall" selectByExampleQueryId="true"/>-->
<!--<table tableName="BILLIARDS_SECOND_MALL_COMMENT" domainObjectName="BilliardsSecondMallComment"-->
<!--selectByExampleQueryId="true"/>-->
<!--<table tableName="BILLIARDS_SECOND_MALL_IMAGES" domainObjectName="BilliardsSecondMallImages" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_SECOND_TYPE" domainObjectName="BilliardsSecondType" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_SET_MEAL" domainObjectName="BilliardsSetMeal" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_STAR_RATING" domainObjectName="BilliardsStarRating" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_TRANSACTION_WATER" domainObjectName="BilliardsTransactionWater" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_USERS" domainObjectName="BilliardsUsers" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_USER_IMAGES" domainObjectName="BilliardsUserImages" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_USERS_APPRECIATE" domainObjectName="BilliardsUserAppreciate" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_USER_COMMUNICATION" domainObjectName="BilliardsUserCommunication" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_USER_COMPETITION_SEASON" domainObjectName="BilliardsUserCompetitionSeason" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_USER_COMPETITION_SEASON_CONFIG" domainObjectName="BilliardsUserCompetitionSeasonConfig" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_USER_FOLLOW" domainObjectName="BilliardsUserFollow" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_USER_COLLECTIONS" domainObjectName="BilliardsUserCollections" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_USER_HIS" domainObjectName="BilliardsUserHis" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_USER_MESSAGE" domainObjectName="BilliardsUserMessage" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_USER_ROOM" domainObjectName="BilliardsUserRoom" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_USER_ROOM_ACCOUNT" domainObjectName="BilliardsUserRoomAccount" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_WINE" domainObjectName="BilliardsWine" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_WINE_PAY" domainObjectName="BilliardsWinePay" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_FACILITIES_CONFIG" domainObjectName="BilliardsFacilitiesConfig" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_FACILITIES" domainObjectName="BilliardsFacilities" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_INFO_APPRAISE" domainObjectName="BilliardsInfoAppraise" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_MATCH_PLAYUSER_STATUS" domainObjectName="BilliardsMatchPlayuserStatus" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_GOODS_SCHEDULED_TIME" domainObjectName="BilliardsGoodsScheduledTime" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_RANKING_CAREER_MAIN" domainObjectName="BilliardsRankingCareerMain" selectByExampleQueryId="true" />-->
<!--<table tableName="BILLIARDS_RANKING_CAREER_INFO" domainObjectName="BilliardsRankingCareerInfo" selectByExampleQueryId="true" />-->
<table tableName="BILLIARBS_COMPETITION_BASIC" domainObjectName="BilliarbsCompetitionBasic" selectByExampleQueryId="true"/>
<table tableName="BILLIARBS_COMPETITION_NEW_OPPONENTS_DATA" domainObjectName="BilliarbsCompetitionNewOpponentsData" selectByExampleQueryId="true"/>
<table tableName="BILLIARBS_COMPETITION_SEASON_DATA" domainObjectName="BilliarbsCompetitionSeasonData" selectByExampleQueryId="true"/>
<table tableName="BILLIARBS_COMPETITION_SEASON_DB" domainObjectName="BilliarbsCompetitionSeasonDb" selectByExampleQueryId="true"/>
<table tableName="BILLIARBS_COMPETITION_WINORFAIL" domainObjectName="BilliarbsCompetitionWinorfail" selectByExampleQueryId="true"/>
<table tableName="BILLIARBS_COMPETITION_SEASON_RESULT" domainObjectName="BilliarbsCompetitionSeasonResult" selectByExampleQueryId="true"/>
<table tableName="BILLIARBS_COMPETITION_SEASON_FINAL" domainObjectName="BilliarbsCompetitionSeasonFinal" selectByExampleQueryId="true"/>
<table tableName="BILLIARBS_COMPETITION_TOTAL_RESULT" domainObjectName="BilliarbsCompetitionTotalResult" selectByExampleQueryId="true"/>
<table tableName="BILLIARBS_COMPETITION_TOTAL_RESULT" domainObjectName="BilliarbsCompetitionTotalResult" selectByExampleQueryId="true"/>
</context>
</generatorConfiguration>
数据库配置改为如下:路径自己照着上面设置自己的,新建代码包,然后写入路径就可以了
```clike
connectionURL="jdbc:mysql://xxx.xxx.xxx.xxxx:3306/billiards?useUnicode=true"
spring:
application:
name: billiards-server-center
jackson:
date-format: yyyy-MM-dd HH:mm:ss
joda-date-time-format: yyyy-MM-dd HH:mm:ss
#数据库配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://xxx.xxx.xxx.xxx:3306/billiards?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
username: root
password: 1234
数据库写入yml文件就行,自己改connection配置
public class MybatisGenerateTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testGenerate() throws IOException, SQLException,
InterruptedException, XMLParserException, InvalidConfigurationException {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
URL path = this.getClass().getClassLoader().getResource("generatorConfig.xml");
System.out.println(path);
File configFile = new File(path.getPath());
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
callback, warnings);
myBatisGenerator.generate(null);
for (String w : warnings)
System.out.println("w : " + w);
}
}
逆向工程启动代码块,写入上面的xml文件一个目录文件夹中,比如src下面有main 下面有java和resources两个包,xml写入resources,那么xml文件写入对应的java中,我都是建立在service层。
启动后自动生成domain、dao、xml文件。
接下来开始业务了,写代码:
package com.yuyuka.billiards.service.manager;
import com.yuyuka.billiards.service.domain.*;
import java.util.List;
/**
* 插入新对手
* 插入新用户
* 比赛类型
* 比赛赛季
* 按主键获取时长
* 更新二级表内容
*/
public interface BilliardsKoSetDetailsManager {
/**
* 统计数据入口方法
* @param billiarbsCompetitionBasic
* @return
*/
public Boolean putCompetitionBase(BilliarbsCompetitionBasic billiarbsCompetitionBasic);
}
实现它
package com.yuyuka.billiards.service.manager.impl;
import com.yuyuka.billiards.service.dao.BilliarbsCompetitionBasicMapper;
import com.yuyuka.billiards.service.domain.BilliarbsCompetitionBasic;
import com.yuyuka.billiards.service.manager.BilliardsKoSetDetailsManager;
import com.yuyuka.billiards.service.manager.impl.total.BilliarbsKoSetData;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
@Component
public class BilliarbsKoSetDetailsManagerImpl implements BilliardsKoSetDetailsManager {
@Resource
List<BilliarbsKoSetData> billiarbsKoSetDataList;
@Resource
private BilliarbsCompetitionBasicMapper billiarbsCompetitionBasicMapper;
@Override
public Boolean putCompetitionBase(BilliarbsCompetitionBasic billiarbsCompetitionBasic) {
billiarbsKoSetDataList.stream().forEach(billiarbsKoSetData-> {
try {
billiarbsKoSetData.putData(billiarbsCompetitionBasic);
} catch (Exception e) {
e.printStackTrace();
}
});
billiarbsCompetitionBasicMapper.insert(billiarbsCompetitionBasic);
return true;
}
}
接口的实现类,该接口用了Stream()方法多线程实现4组表计算功能
那么有个问题就是,如果两个用户同时比赛完,同时put数据,那不就产生并发问题了吗?解决这个可以用mq或kafka,考虑到成本,我们用activemq,activemq功能机制是生产者发消息给activemq的jmsserve->服务器监听->发送个json->传obj基本数据->代码业务 然后再put进去,代码如下:
用户数据比较多的情况下,可以send消息到activemq中去,配置好activemq之后
activemq:
broker-url: failover://(tcp://192.168.x.xx:xxx,tcp://192.168.x.xx:xxx,tcp://192.168.x.xx:xxx)?randomize=false
user: admin
password: admin
pool:
enabled: true
configuration:
max-connections: 50
expiry-timeout: 10000
idle-timeout: 30000
@Override
public Boolean sendCompetitionData(Object message) {
Destination destination = new ActiveMQQueue(env + "_getCompetitionData");
try {
jmsTemplate.convertAndSend(destination, JsonUtils.toJSON(message));
return true;
} catch (Exception e) {
log.error("发送Activemq 异常,异常原因 ", e);
return false;
}
}
自己起名字,我那个getCompetitionData在activemq会显示出来,每秒执行一次
/**
* 比赛数据监听方法
*/
@Resource
BilliardsKoSetDetailsManager billiardsKoSetDetailsManager;
@JmsListener(destination = "${spring.profiles.active}" + "_getCompetitionData")
public void onBilliardsCompetitioonListener(String message) {
log.info("商户监听到新加数据 [{}]", message);
BilliardsCompetitionBasic billiardsCompetitionBasic = com.apus.util.JsonUtils.fromJson(message, new TypeToken<BilliardsCompetitionBasic>() {
}.getType());
try {
billiardsKoSetDetailsManager.putCompetitionBase(billiardsCompetitionBasic);
} catch (Exception e) {
e.printStackTrace();
}
}
以上是监听方法@JmsListener注解括号+后面输入你的mq队列命名fromjson里写入你要监听的类,下面执行你要执行的方法即可,点测试即可运行,测试的时候注意不要put也不要get,先把基础表数据send到mq里,然后再进行put计算二级表。最后get二级表数据计算最终结果。
package com.yuyuka.billiards.service.manager.impl.total;
import com.yuyuka.billiards.service.domain.BilliarbsCompetitionBasic;
public interface BilliarbsKoSetData {
/**
* 计算二维表数据
* @param billiarbsCompetitionBasic
* @return
*/
public Boolean putData(BilliarbsCompetitionBasic billiarbsCompetitionBasic) throws Exception;
}
这个接口是用来算出各种数据的业务接口,每个数据类都要继承这个接口,接口的方便不宜多说
package com.yuyuka.billiards.service.manager.impl.total.set;
import com.yuyuka.billiards.service.dao.*;
import com.yuyuka.billiards.service.domain.*;
import com.yuyuka.billiards.service.manager.impl.total.BilliardsKoSetData;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
/**
* 新对手统计
*/
@Component
public class BilliardsKoSetNewOpponentsData implements BilliardsKoSetData {
// 基础数据对象
@Resource
private BilliardsCompetitionBasicMapper billiardsCompetitionBasicMapper;
// 新对手二级表操作对象
@Resource
private BilliardsCompetitionNewOpponentsDataMapper billiardsCompetitionNewOpponentsDataMapper;
@Override
public Boolean putData(BilliardsCompetitionBasic billiardsCompetitionBasic) throws Exception {
BilliardsCompetitionBasicExample example = new BilliardsCompetitionBasicExample();
example.or().andUser1IdEqualTo(billiardsCompetitionBasic.getUser1Id()).andUser2IdEqualTo(billiardsCompetitionBasic.getUser2Id());
example.or().andUser2IdEqualTo(billiardsCompetitionBasic.getUser1Id()).andUser1IdEqualTo(billiardsCompetitionBasic.getUser2Id());
List<BilliardsCompetitionBasic> isHiveBattle = billiardsCompetitionBasicMapper.selectByExample(example);
if (isHiveBattle == null || isHiveBattle.isEmpty()){
// 是新对手
updateTotal(billiardsCompetitionBasic.getUser1Id(),billiardsCompetitionBasic.getCopId(),billiardsCompetitionBasic.getSeason(),billiardsCompetitionBasic.getType(),billiardsCompetitionBasic);
updateTotal(billiardsCompetitionBasic.getUser2Id(),billiardsCompetitionBasic.getCopId(),billiardsCompetitionBasic.getSeason(),billiardsCompetitionBasic.getType(),billiardsCompetitionBasic);
return null;
}else{
return true;
}
}
public BilliardsCompetitionNewOpponentsData updateTotal(Long userId,Long copId,String season,String type,BilliardsCompetitionBasic billiardsCompetitionBasic) throws Exception {
BilliardsCompetitionNewOpponentsDataExample competitionNewOpponentsDataExample = new BilliardsCompetitionNewOpponentsDataExample();
BilliardsCompetitionNewOpponentsDataExample.Criteria criteria = competitionNewOpponentsDataExample.createCriteria();
criteria.andUserIdEqualTo(userId);
BilliardsCompetitionNewOpponentsData userCometitionNewOpponentsData;
List<BilliardsCompetitionNewOpponentsData> billiardsCompetitionNewOpponentsData = billiardsCompetitionNewOpponentsDataMapper.selectByExample(competitionNewOpponentsDataExample);
if (billiardsCompetitionNewOpponentsData != null && !billiardsCompetitionNewOpponentsData.isEmpty()){
userCometitionNewOpponentsData = billiardsCompetitionNewOpponentsData.get(0);
int count = billiardsCompetitionNewOpponentsDataMapper.updateByPrimaryKey(sumTotal(billiardsCompetitionBasic,userCometitionNewOpponentsData));
if (count <= 0){
throw new Exception("更新数据失败");
}
}else{
userCometitionNewOpponentsData = new BilliardsCompetitionNewOpponentsData();
userCometitionNewOpponentsData.setUserId(userId);
userCometitionNewOpponentsData.setSeason(billiardsCompetitionBasic.getSeason());
userCometitionNewOpponentsData.setType(billiardsCompetitionBasic.getType());
userCometitionNewOpponentsData.setCopid(billiardsCompetitionBasic.getCopId());
userCometitionNewOpponentsData.setTotalPalyers(0L);
userCometitionNewOpponentsData.setTotalFucks(0L);
userCometitionNewOpponentsData.setTotalFuckeds(0L);
userCometitionNewOpponentsData.setTotalFirstFailtime(0L);
userCometitionNewOpponentsData.setTotalFirstWintime(0L);
userCometitionNewOpponentsData.setWinOrFail(0L);
int count = billiardsCompetitionNewOpponentsDataMapper.insert(sumTotal(billiardsCompetitionBasic,userCometitionNewOpponentsData));
if (count <= 0){
throw new Exception("插入数据库错误");
}
}
return userCometitionNewOpponentsData;
}
public BilliardsCompetitionNewOpponentsData sumTotal(BilliardsCompetitionBasic billiardsCompetitionBasic,BilliardsCompetitionNewOpponentsData billiardsCompetitionNewOpponentsData){
// 胜利者用户主键
Long winUserId = billiardsCompetitionBasic.getUser1P()<billiardsCompetitionBasic.getUser2P()?billiardsCompetitionBasic.getUser2Id():billiardsCompetitionBasic.getUser1Id();
// 胜利者累计
if (billiardsCompetitionNewOpponentsData.getUserId().longValue()==winUserId.longValue()){
// 胜场总时长
billiardsCompetitionNewOpponentsData.setTotalFirstWintime((billiardsCompetitionNewOpponentsData.getTotalFirstWintime()+billiardsCompetitionBasic.getEndTime().getTime()-billiardsCompetitionBasic.getStartTime().getTime())/1000);
// 胜场总人数
billiardsCompetitionNewOpponentsData.setTotalFucks(billiardsCompetitionNewOpponentsData.getTotalFucks()+1);
}else{
// 败场总时长
billiardsCompetitionNewOpponentsData.setTotalFirstFailtime((billiardsCompetitionNewOpponentsData.getTotalFirstFailtime()+billiardsCompetitionBasic.getEndTime().getTime()-billiardsCompetitionBasic.getStartTime().getTime())/1000);
// 败场总场次
billiardsCompetitionNewOpponentsData.setTotalFuckeds(billiardsCompetitionNewOpponentsData.getTotalFuckeds()+1);
}
// 累计总场次
billiardsCompetitionNewOpponentsData.setTotalPalyers(billiardsCompetitionNewOpponentsData.getTotalPalyers()+1);
billiardsCompetitionNewOpponentsData.setWinOrFail(billiardsCompetitionNewOpponentsData.getTotalFuckeds()+billiardsCompetitionNewOpponentsData.getTotalFucks()-billiardsCompetitionNewOpponentsData.getTotalPalyers());
return billiardsCompetitionNewOpponentsData;
}
}
package com.yuyuka.billiards.service.manager.impl.total.set;
import com.yuyuka.billiards.service.dao.BilliardsCompetitionBasicMapper;
import com.yuyuka.billiards.service.dao.BilliardsCompetitionSeasonDataMapper;
import com.yuyuka.billiards.service.domain.*;
import com.yuyuka.billiards.service.manager.impl.total.BilliardsKoSetData;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@Component
public class BilliardsKoSetSeasonData implements BilliardsKoSetData {
// 二级表操作对象,每场比赛都返回用户信息
@Resource
private BilliardsCompetitionSeasonDataMapper billiardsCompetitionSeasonDataMapper;
@Resource
private BilliardsCompetitionBasicMapper billiardsCompetitionBasicMapper;
@Override
public Boolean putData(BilliardsCompetitionBasic billiardsCompetitionBasic) throws Exception {
updateSeasonDatas(billiardsCompetitionBasic.getUser1Id(),billiardsCompetitionBasic.getSeason(),billiardsCompetitionBasic.getCopId(),billiardsCompetitionBasic.getType(),billiardsCompetitionBasic);
updateSeasonDatas(billiardsCompetitionBasic.getUser2Id(),billiardsCompetitionBasic.getSeason(),billiardsCompetitionBasic.getCopId(),billiardsCompetitionBasic.getType(),billiardsCompetitionBasic);
return true;
}
public BilliardsCompetitionSeasonData updateSeasonDatas(Long userId,String season,Long copId,String type,BilliardsCompetitionBasic billiardsCompetitionBasic) throws Exception {
BilliardsCompetitionSeasonDataExample example = new BilliardsCompetitionSeasonDataExample();
BilliardsCompetitionSeasonDataExample.Criteria c = example.createCriteria();
c.andUserIdEqualTo(userId).andSeasonEqualTo(season);
BilliardsCompetitionSeasonData billiardsCompetitionSeasonData;
List<BilliardsCompetitionSeasonData> billiardsKoSetSeasonDatas = billiardsCompetitionSeasonDataMapper.selectByExample(example);
if (billiardsKoSetSeasonDatas != null && !billiardsKoSetSeasonDatas.isEmpty()) {
billiardsCompetitionSeasonData = billiardsKoSetSeasonDatas.get(0);
int count = billiardsCompetitionSeasonDataMapper.updateByPrimaryKey(finalResult(userId,billiardsCompetitionBasic, billiardsCompetitionSeasonData));
if (count <=0) {
throw new Exception("场次数据更新数据失败");
}
}else{
billiardsCompetitionSeasonData=new BilliardsCompetitionSeasonData();
billiardsCompetitionSeasonData.setId(billiardsCompetitionBasic.getId());
billiardsCompetitionSeasonData.setUserId(userId);
billiardsCompetitionSeasonData.setCopId(billiardsCompetitionBasic.getCopId());
billiardsCompetitionSeasonData.setType(billiardsCompetitionBasic.getType());
billiardsCompetitionSeasonData.setSeason(billiardsCompetitionBasic.getSeason());
billiardsCompetitionSeasonData.setAggre(0L);
billiardsCompetitionSeasonData.setDefend(0L);
billiardsCompetitionSeasonData.setVrt(new BigDecimal(0.0));
billiardsCompetitionSeasonData.setGradeRate(new BigDecimal(0.0));
billiardsCompetitionSeasonData.setSceneLong(0L);
billiardsCompetitionSeasonData.setWinScenes(0L);
int count=billiardsCompetitionSeasonDataMapper.insert(finalResult(userId,billiardsCompetitionBasic,billiardsCompetitionSeasonData));
if(count<=0){
throw new Exception("数据库输入错误");
}
}
return billiardsCompetitionSeasonData;
}
/**
* 获取最终计算结果
* @param billiardsCompetitionBasic
* @param billiardsCompetitionSeasonData
* @return
* @throws ParseException
*/
public BilliardsCompetitionSeasonData finalResult(Long userId,BilliardsCompetitionBasic billiardsCompetitionBasic, BilliardsCompetitionSeasonData billiardsCompetitionSeasonData) throws Exception {
//场次时长
billiardsCompetitionSeasonData.setSceneLong(getSeconds(billiardsCompetitionBasic.getStartTime(), billiardsCompetitionBasic.getEndTime()));
Long winUserId = billiardsCompetitionBasic.getUser1P() < billiardsCompetitionBasic.getUser2P() ? billiardsCompetitionBasic.getUser2Id() : billiardsCompetitionBasic.getUser1Id();
Long winUserP = billiardsCompetitionBasic.getUser1P() > billiardsCompetitionBasic.getUser2P() ? billiardsCompetitionBasic.getUser1P() : billiardsCompetitionBasic.getUser2P();
Long failUserP = billiardsCompetitionBasic.getUser1P() < billiardsCompetitionBasic.getUser2P() ? billiardsCompetitionBasic.getUser1P() : billiardsCompetitionBasic.getUser2P();
//攻击力
BigDecimal userAggre=null;//攻击力参数
BigDecimal aa=new BigDecimal((billiardsCompetitionBasic.getUser1P() + billiardsCompetitionBasic.getUser2P()) * 800);
BigDecimal b=new BigDecimal((billiardsCompetitionBasic.getUser1P() + billiardsCompetitionBasic.getUser2P()) * 800)
.divide(new BigDecimal( getSeconds(billiardsCompetitionBasic.getStartTime(), billiardsCompetitionBasic.getEndTime())),2,BigDecimal.ROUND_DOWN);
BigDecimal ttt=new BigDecimal(userId.longValue()==winUserId.longValue()?(winUserP+5):(failUserP+2));
BigDecimal yy=new BigDecimal((userId.longValue()==winUserId.longValue()?(winUserP+winUserP+failUserP+222.1):(failUserP+winUserP+failUserP+222.1)));
BigDecimal c=ttt
.multiply(yy.setScale(2,BigDecimal.ROUND_DOWN));
userAggre=b.setScale(2,BigDecimal.ROUND_DOWN).multiply(c);
//向下取整
billiardsCompetitionSeasonData.setAggre(billiardsCompetitionSeasonData.getAggre()+userAggre.setScale(0, BigDecimal.ROUND_DOWN ).longValue());
//防御力
BigDecimal userDefend=null;//防御力参数
BigDecimal m=new BigDecimal(userId.longValue()==winUserId?winUserP:failUserP)
.add(new BigDecimal(1));
BigDecimal w= m.divide(new BigDecimal(winUserP+failUserP+1L),2,BigDecimal.ROUND_DOWN);
BigDecimal n=getWinRate(userId,billiardsCompetitionBasic,billiardsCompetitionSeasonData)
.multiply(new BigDecimal(12588))
.add(new BigDecimal(7200-getSeconds(billiardsCompetitionBasic.getStartTime(),billiardsCompetitionBasic.getEndTime())));
userDefend=w.multiply(n);
//向下取整
billiardsCompetitionSeasonData.setDefend(userDefend.setScale(0,BigDecimal.ROUND_DOWN).longValue());
//gradeRate得分比
BigDecimal gradeRate=null;
gradeRate = new BigDecimal(userId.longValue()==winUserId.longValue()?winUserP:failUserP)
.divide(new BigDecimal(winUserP).add(new BigDecimal(failUserP)),2,BigDecimal.ROUND_DOWN)
.multiply(new BigDecimal(8.99))
.add(userId.longValue()==winUserId.longValue()?new BigDecimal(1.01):new BigDecimal(0));
billiardsCompetitionSeasonData.setGradeRate(gradeRate.setScale(2,BigDecimal.ROUND_DOWN));
//vrt战绩
BigDecimal a = null;
try {
a = new BigDecimal((billiardsCompetitionBasic.getUser1P() + billiardsCompetitionBasic.getUser2P()) * 360 )
.divide(new BigDecimal(getSeconds(billiardsCompetitionBasic.getStartTime(), billiardsCompetitionBasic.getEndTime())),3,BigDecimal.ROUND_CEILING)
.multiply(new BigDecimal((winUserId.longValue() == userId.longValue() ? winUserP:failUserP)+ 1).setScale(2,BigDecimal.ROUND_DOWN))
.add(
new BigDecimal(userId.longValue()==winUserId.longValue()?winUserP:failUserP).add(new BigDecimal(1))
.divide(new BigDecimal(winUserP+failUserP+1),3, BigDecimal.ROUND_DOWN)
.multiply(new BigDecimal(4)));
} catch (ParseException e) {
e.printStackTrace();
}
billiardsCompetitionSeasonData.setVrt(a.setScale(2, BigDecimal.ROUND_HALF_UP));
billiardsCompetitionSeasonData.setWinScenes(userId.longValue()==winUserId.longValue()?(billiardsCompetitionSeasonData.getWinScenes()+1L):(billiardsCompetitionSeasonData.getWinScenes()));
return billiardsCompetitionSeasonData;
}
/**
* 获取时长换秒
* @param startTime
* @param endTime
* @throws ParseException
*/
public Long getSeconds(Date startTime, Date endTime) throws Exception {
long timeLong = (endTime.getTime()-startTime.getTime())/1000;//除以1000是为了转换成秒
if(timeLong>=7200L||timeLong<=900L){
throw new Exception("比赛不算数");
}else{
return timeLong;
}
}
/**
* 胜率
* @param userId
* @param billiardsCompetitionBasic
* @param billiardsCompetitionSeasonData
* @return
*/
public BigDecimal getWinRate(Long userId,BilliardsCompetitionBasic billiardsCompetitionBasic,BilliardsCompetitionSeasonData billiardsCompetitionSeasonData) {
//总场次
BilliardsCompetitionBasicExample example = new BilliardsCompetitionBasicExample();
BilliardsCompetitionBasicExample.Criteria c = example.createCriteria();
example.or().andUser1IdEqualTo(userId);
example.or().andUser2IdEqualTo(userId);
//总玩场次数
Long count = billiardsCompetitionBasicMapper.countByExample(example);
if(count==0){
return new BigDecimal(0);
}
//胜场次
BilliardsCompetitionBasicExample example1 = new BilliardsCompetitionBasicExample();
BilliardsCompetitionBasicExample.Criteria c1 = example.createCriteria();
Long winId=billiardsCompetitionBasic.getUser1P()>billiardsCompetitionBasic.getUser2P()?billiardsCompetitionBasic.getUser1Id():billiardsCompetitionBasic.getUser2Id();
example1.or().andUser1IdEqualTo(userId).andUser1PGreaterThan(billiardsCompetitionBasic.getUser2P());
example1.or().andUser2IdEqualTo(userId).andUser2PGreaterThan(billiardsCompetitionBasic.getUser1P());
Long winCount=billiardsCompetitionBasicMapper.countByExample(example1);
return new BigDecimal(winCount).divide(new BigDecimal(count),2,BigDecimal.ROUND_DOWN);
}
}
package com.yuyuka.billiards.total;
import com.yuyuka.billiards.service.BootStrap;
import com.yuyuka.billiards.service.domain.BilliarbsCompetitionBasic;
import com.yuyuka.billiards.service.manager.BilliardsKoSetDetailsManager;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.SimpleTimeZone;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = BootStrap.class)
public class BilliabsCompetitionTest {
@Resource
private BilliardsKoSetDetailsManager billiardsKoSetDetailsManager;
@Test
public void putData(){
BilliarbsCompetitionBasic billiarbsCompetitionBasic = new BilliarbsCompetitionBasic();
billiarbsCompetitionBasic.setCopId(001L);
try {
billiarbsCompetitionBasic.setEndTime(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse("2019-10-15 16:03:27"));
} catch (ParseException e) {
e.printStackTrace();
}
billiarbsCompetitionBasic.setStartTime(new Date());
billiarbsCompetitionBasic.setUser1Id(1l);
billiarbsCompetitionBasic.setUser2Id(2l);
billiarbsCompetitionBasic.setSeason("1");
billiarbsCompetitionBasic.setType("1l");
billiarbsCompetitionBasic.setUser1P(3l);
billiarbsCompetitionBasic.setUser2P(5l);
billiardsKoSetDetailsManager.putCompetitionBase(billiarbsCompetitionBasic);
}
}
返回每场比赛用户情况
package com.yuyuka.billiards.service.manager.impl.total.set;
import com.yuyuka.billiards.service.dao.BilliardsCompetitionBasicMapper;
import com.yuyuka.billiards.service.dao.BilliardsCompetitionSeasonDbMapper;
import com.yuyuka.billiards.service.domain.*;
import com.yuyuka.billiards.service.manager.impl.total.BilliardsKoSetData;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
@Component
public class BilliardsKoSetSeasonDbData implements BilliardsKoSetData{
@Resource
private BilliardsCompetitionSeasonDbMapper billiardsCompetitionSeasonDbMapper;
@Resource
private BilliardsCompetitionBasicMapper billiardsCompetitionBasicMapper;
/**
*
* @param billiardsCompetitionBasic
* @return
* @throws Exception
*/
@Override
public Boolean putData(BilliardsCompetitionBasic billiardsCompetitionBasic) throws Exception {
BilliardsCompetitionBasicExample example =new BilliardsCompetitionBasicExample();
updateDatas(billiardsCompetitionBasic.getUser1Id(),billiardsCompetitionBasic.getSeason(),billiardsCompetitionBasic.getCopId(),billiardsCompetitionBasic.getType(),billiardsCompetitionBasic);
updateDatas(billiardsCompetitionBasic.getUser2Id(),billiardsCompetitionBasic.getSeason(),billiardsCompetitionBasic.getCopId(),billiardsCompetitionBasic.getType(),billiardsCompetitionBasic);
return true;
}
/**
* 更新计算数
* @param userId
* @param season
* @param billiardsCompetitionBasic
* @return
* @throws Exception
*/
private BilliardsCompetitionSeasonDb updateDatas(Long userId, String season,Long copId,String type,BilliardsCompetitionBasic billiardsCompetitionBasic) throws Exception {
BilliardsCompetitionSeasonDbExample example = new BilliardsCompetitionSeasonDbExample();
BilliardsCompetitionSeasonDbExample.Criteria c = example.createCriteria();
c.andUserIdEqualTo(userId).andSeasonEqualTo(season).andCopIdEqualTo(copId).andTypeEqualTo(type);
BilliardsCompetitionSeasonDb billiardsCompetitionSeasonDb;
List<BilliardsCompetitionSeasonDb> billiardsKoSetSeasonDbDataList = billiardsCompetitionSeasonDbMapper.selectByExample(example);
if(billiardsKoSetSeasonDbDataList!=null&& !billiardsKoSetSeasonDbDataList.isEmpty()) {
billiardsCompetitionSeasonDb = billiardsKoSetSeasonDbDataList.get(0);
int count = billiardsCompetitionSeasonDbMapper.updateByPrimaryKey(addResult(userId,billiardsCompetitionBasic, billiardsCompetitionSeasonDb));
if (count <= 0) {
throw new Exception("赛季数据库更新错误");
}
}else{
billiardsCompetitionSeasonDb = new BilliardsCompetitionSeasonDb();
billiardsCompetitionSeasonDb.setId(billiardsCompetitionBasic.getId());
billiardsCompetitionSeasonDb.setUserId(userId);
billiardsCompetitionSeasonDb.setSeason(billiardsCompetitionBasic.getSeason());
billiardsCompetitionSeasonDb.setCopId(billiardsCompetitionBasic.getCopId());
billiardsCompetitionSeasonDb.setType(billiardsCompetitionBasic.getType());
billiardsCompetitionSeasonDb.setTotalPlayers(0L);
billiardsCompetitionSeasonDb.setTotalFuckedPers(0L);
billiardsCompetitionSeasonDb.setTotalFuckPers(0L);
billiardsCompetitionSeasonDb.setTotalWinInnings(0L);
billiardsCompetitionSeasonDb.setTotalInnings(0L);
billiardsCompetitionSeasonDb.setTotalWinScenes(0L);
billiardsCompetitionSeasonDb.setTotalScenes(0L);
billiardsCompetitionSeasonDb.setAddAggre(0L);
billiardsCompetitionSeasonDb.setAddDefend(0L);
billiardsCompetitionSeasonDb.setAddArt(new BigDecimal(0.00));
billiardsCompetitionSeasonDb.setAddGradeRate(new BigDecimal(0.00));
billiardsCompetitionSeasonDb.setAddSceneTime(0L);
billiardsCompetitionSeasonDb.setWinScenes(0L);
int count = billiardsCompetitionSeasonDbMapper.insert(addResult(userId,billiardsCompetitionBasic,billiardsCompetitionSeasonDb));
if(count<=0){
throw new Exception("数据插入失败");
}
}
return billiardsCompetitionSeasonDb;
}
/**
*
* @param userId
* @param billiardsCompetitionBasic
* @param billiardsCompetitionSeasonDb
* @return
* @throws ParseException
*/
public BilliardsCompetitionSeasonDb addResult(Long userId,BilliardsCompetitionBasic billiardsCompetitionBasic,BilliardsCompetitionSeasonDb billiardsCompetitionSeasonDb) throws Exception {
Long winUserId = billiardsCompetitionBasic.getUser1P() < billiardsCompetitionBasic.getUser2P() ? billiardsCompetitionBasic.getUser2Id() : billiardsCompetitionBasic.getUser1Id();
Long winUserP = billiardsCompetitionBasic.getUser1P() > billiardsCompetitionBasic.getUser2P() ? billiardsCompetitionBasic.getUser1P() : billiardsCompetitionBasic.getUser2P();
Long failUserP = billiardsCompetitionBasic.getUser1P() < billiardsCompetitionBasic.getUser2P() ? billiardsCompetitionBasic.getUser1P() : billiardsCompetitionBasic.getUser2P();
//攻击力
BigDecimal userAggre=null;//攻击力参数
BigDecimal aa=new BigDecimal((billiardsCompetitionBasic.getUser1P() + billiardsCompetitionBasic.getUser2P()) * 800);
BigDecimal b=new BigDecimal((billiardsCompetitionBasic.getUser1P() + billiardsCompetitionBasic.getUser2P()) * 800)
.divide(new BigDecimal( getSeconds(billiardsCompetitionBasic.getStartTime(), billiardsCompetitionBasic.getEndTime())),2,BigDecimal.ROUND_DOWN);
BigDecimal ttt=new BigDecimal(userId.longValue()==winUserId.longValue()?(winUserP+5):(failUserP+2));
BigDecimal yy=new BigDecimal((userId.longValue()==winUserId.longValue()?(winUserP+winUserP+failUserP+222.1):(failUserP+winUserP+failUserP+222.1)));
BigDecimal c=ttt
.multiply(yy.setScale(2,BigDecimal.ROUND_DOWN));
userAggre=b.setScale(2,BigDecimal.ROUND_DOWN).multiply(c);
//向下取整
billiardsCompetitionSeasonDb.setAddAggre(billiardsCompetitionSeasonDb.getAddAggre()+userAggre.setScale(0, BigDecimal.ROUND_DOWN ).longValue());
//防御力
BigDecimal userDefend=null;//防御力参数
BigDecimal m=new BigDecimal(userId.longValue()==winUserId?winUserP:failUserP)
.add(new BigDecimal(1));
BigDecimal w= m.divide(new BigDecimal(winUserP+failUserP+1L),2,BigDecimal.ROUND_DOWN);
BigDecimal n=getWinRate(userId,billiardsCompetitionBasic,billiardsCompetitionSeasonDb)
.multiply(new BigDecimal(12588))
.add(new BigDecimal(7200-getSeconds(billiardsCompetitionBasic.getStartTime(),billiardsCompetitionBasic.getEndTime())));
userDefend=w.multiply(n);
//向下取整
billiardsCompetitionSeasonDb.setAddDefend(billiardsCompetitionSeasonDb.getAddDefend()+userDefend.setScale(0,BigDecimal.ROUND_DOWN).longValue());
//gradeRate得分比
BigDecimal gradeRate=null;
BigDecimal aaaaa=new BigDecimal(userId.longValue()==winUserId.longValue()?winUserP:failUserP);
BigDecimal bbbbb=new BigDecimal(winUserP).add(new BigDecimal(failUserP));
gradeRate = new BigDecimal(userId.longValue()==winUserId.longValue()?winUserP:failUserP)
.divide(new BigDecimal(winUserP).add(new BigDecimal(failUserP)),3,BigDecimal.ROUND_DOWN)
.multiply(new BigDecimal(8.99))
.add(new BigDecimal(userId.longValue()==winUserId?1.01:0));
billiardsCompetitionSeasonDb.setAddGradeRate(billiardsCompetitionSeasonDb.getAddGradeRate().add(gradeRate.setScale(2,BigDecimal.ROUND_DOWN)));
//vrt战绩
BigDecimal a = null;
try {
a = new BigDecimal((billiardsCompetitionBasic.getUser1P() + billiardsCompetitionBasic.getUser2P()) * 360 )
.divide(new BigDecimal(getSeconds(billiardsCompetitionBasic.getStartTime(), billiardsCompetitionBasic.getEndTime())),3,BigDecimal.ROUND_CEILING)
.multiply(new BigDecimal((winUserId.longValue() == userId.longValue() ? winUserP:failUserP)+ 1).setScale(2,BigDecimal.ROUND_DOWN))
.add(
new BigDecimal(userId.longValue()==winUserId.longValue()?winUserP:failUserP).add(new BigDecimal(1))
.divide(new BigDecimal(winUserP+failUserP+1),3, BigDecimal.ROUND_DOWN)
.multiply(new BigDecimal(4)));
} catch (ParseException e) {
e.printStackTrace();
}
billiardsCompetitionSeasonDb.setAddArt(billiardsCompetitionSeasonDb.getAddArt().add(a.setScale(2, BigDecimal.ROUND_DOWN)));
/**
* 判断对手数
*/
BilliardsCompetitionBasicExample example = new BilliardsCompetitionBasicExample();
example.or().andUser1IdEqualTo(billiardsCompetitionBasic.getUser1Id()).andUser2IdEqualTo(billiardsCompetitionBasic.getUser2Id());
example.or().andUser2IdEqualTo(billiardsCompetitionBasic.getUser1Id()).andUser1IdEqualTo(billiardsCompetitionBasic.getUser2Id());
List<BilliardsCompetitionBasic> isHiveBattle = billiardsCompetitionBasicMapper.selectByExample(example);
if (isHiveBattle == null || isHiveBattle.isEmpty()){
//是新对手
if(billiardsCompetitionSeasonDb.getUserId().longValue()==winUserId.longValue()){
billiardsCompetitionSeasonDb.setTotalFuckPers(billiardsCompetitionSeasonDb.getTotalFuckPers()+1);
billiardsCompetitionSeasonDb.setTotalPlayers(billiardsCompetitionSeasonDb.getTotalPlayers()+1);
}else{
billiardsCompetitionSeasonDb.setTotalFuckedPers(billiardsCompetitionSeasonDb.getTotalFuckedPers()+1);
billiardsCompetitionSeasonDb.setTotalPlayers(billiardsCompetitionSeasonDb.getTotalPlayers()+1);
}
}else{
billiardsCompetitionSeasonDb.setTotalFuckPers(billiardsCompetitionSeasonDb.getTotalFuckPers());
billiardsCompetitionSeasonDb.setTotalFuckedPers(billiardsCompetitionSeasonDb.getTotalFuckedPers());
}
billiardsCompetitionSeasonDb.setWinScenes(userId.longValue()==winUserId.longValue()?(billiardsCompetitionSeasonDb.getWinScenes()+1L):(billiardsCompetitionSeasonDb.getWinScenes()));
billiardsCompetitionSeasonDb.setTotalWinScenes(billiardsCompetitionSeasonDb.getTotalWinScenes()+userId.longValue()==winUserId.longValue()?1L:0L);
billiardsCompetitionSeasonDb.setTotalWinInnings(billiardsCompetitionSeasonDb.getTotalWinInnings()+(userId.longValue()==winUserId.longValue()?winUserP:failUserP));
billiardsCompetitionSeasonDb.setTotalInnings(winUserP+failUserP+billiardsCompetitionSeasonDb.getTotalInnings());
billiardsCompetitionSeasonDb.setTotalScenes(billiardsCompetitionSeasonDb.getTotalScenes()+1);
billiardsCompetitionSeasonDb.setAddSceneTime(billiardsCompetitionSeasonDb.getAddSceneTime()+getSeconds(billiardsCompetitionBasic.getStartTime(), billiardsCompetitionBasic.getEndTime()));
return billiardsCompetitionSeasonDb;
}
/**
* 获取时长换秒
* @param startTime
* @param endTime
* @throws ParseException
*/
public Long getSeconds(Date startTime, Date endTime) throws Exception {
long timeLong = (endTime.getTime()-startTime.getTime())/1000;
if(timeLong>=7200L||timeLong<=900L){
throw new Exception("比赛不算数");
}else{
return timeLong;
}
}
/**
*
* @param userId
* @param billiardsCompetitionBasic
* @param billiardsCompetitionSeasonDb
* @return
*/
public BigDecimal getWinRate(Long userId,BilliardsCompetitionBasic billiardsCompetitionBasic,BilliardsCompetitionSeasonDb billiardsCompetitionSeasonDb){
//总场次
BilliardsCompetitionBasicExample example = new BilliardsCompetitionBasicExample();
BilliardsCompetitionBasicExample.Criteria c = example.createCriteria();
example.or().andUser1IdEqualTo(userId);
example.or().andUser2IdEqualTo(userId);
//总玩场次数
Long count = billiardsCompetitionBasicMapper.countByExample(example);
if(count==0){
return new BigDecimal(0);
}
//胜场次
BilliardsCompetitionBasicExample example1 = new BilliardsCompetitionBasicExample();
BilliardsCompetitionBasicExample.Criteria c1 = example.createCriteria();
Long winId=billiardsCompetitionBasic.getUser1P()>billiardsCompetitionBasic.getUser2P()?billiardsCompetitionBasic.getUser1Id():billiardsCompetitionBasic.getUser2Id();
example1.or().andUser1IdEqualTo(userId).andUser1PGreaterThan(billiardsCompetitionBasic.getUser2P());
example1.or().andUser2IdEqualTo(userId).andUser2PGreaterThan(billiardsCompetitionBasic.getUser1P());
Long winCount=billiardsCompetitionBasicMapper.countByExample(example1);
return new BigDecimal(winCount).divide(new BigDecimal(count),2,BigDecimal.ROUND_DOWN);
}
}
每场赛季每种比赛类型的数据计算
package com.yuyuka.billiards.service.manager.impl.total.set;
import com.yuyuka.billiards.service.dao.BilliardsCompetitionBasicMapper;
import com.yuyuka.billiards.service.dao.BilliardsCompetitionTotalDataMapper;
import com.yuyuka.billiards.service.domain.*;
import com.yuyuka.billiards.service.manager.impl.total.BilliardsKoSetData;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
@Component
public class BilliardsKoSetTotalData implements BilliardsKoSetData {
/**
* 二级表
*/
@Resource
private BilliardsCompetitionTotalDataMapper billiardsCompetitionTotalDataMapper;
@Resource
private BilliardsCompetitionBasicMapper billiardsCompetitionBasicMapper;
/**
* @param billiardsCompetitionBasic
* @return
* @throws Exception
*/
@Override
public Boolean putData(BilliardsCompetitionBasic billiardsCompetitionBasic) throws Exception {
BilliardsCompetitionBasicExample example = new BilliardsCompetitionBasicExample();
updateTotalDatas(billiardsCompetitionBasic.getUser1Id(), billiardsCompetitionBasic);
updateTotalDatas(billiardsCompetitionBasic.getUser2Id(), billiardsCompetitionBasic);
return true;
}
/**
* 更改总信息
*
* @param userId
* @param billiardsCompetitionBasic
* @return
* @throws Exception
*/
public BilliardsCompetitionTotalData updateTotalDatas(Long userId, BilliardsCompetitionBasic billiardsCompetitionBasic) throws Exception {
BilliardsCompetitionTotalDataExample example = new BilliardsCompetitionTotalDataExample();
BilliardsCompetitionTotalDataExample.Criteria c = example.createCriteria();
c.andUserIdEqualTo(userId);
BilliardsCompetitionTotalData billiardsCompetitionTotalData;
List<BilliardsCompetitionTotalData> billiardsKoSetTotalDatas = billiardsCompetitionTotalDataMapper.selectByExample(example);
if (billiardsKoSetTotalDatas != null && !billiardsKoSetTotalDatas.isEmpty()) {
billiardsCompetitionTotalData = billiardsKoSetTotalDatas.get(0);
int count = billiardsCompetitionTotalDataMapper.updateByPrimaryKey(inningResult(userId, billiardsCompetitionBasic, billiardsCompetitionTotalData));
if (count <= 0) {
throw new Exception("数据更新失败");
}
} else {
billiardsCompetitionTotalData = new BilliardsCompetitionTotalData();
billiardsCompetitionTotalData.setId(billiardsCompetitionBasic.getId());
billiardsCompetitionTotalData.setUserId(userId);
billiardsCompetitionTotalData.setTotalWinInnings(0L);
billiardsCompetitionTotalData.setTotalInnings(0L);
billiardsCompetitionTotalData.setTotalPlayers(0L);
billiardsCompetitionTotalData.setTotalFuckPers(0L);
billiardsCompetitionTotalData.setTotalFuckedPers(0L);
billiardsCompetitionTotalData.setTotalScenes(0L);
billiardsCompetitionTotalData.setWinScenes(0L);
billiardsCompetitionTotalData.setAddAggre(0L);
billiardsCompetitionTotalData.setAddDefend(0L);
billiardsCompetitionTotalData.setAddArt(new BigDecimal(0.0));
billiardsCompetitionTotalData.setAddGradeRate(new BigDecimal(0.0));
billiardsCompetitionTotalData.setAddSceneTime(0L);
int count = billiardsCompetitionTotalDataMapper.insert(inningResult(userId, billiardsCompetitionBasic, billiardsCompetitionTotalData));
if (count <= 0) {
throw new Exception("插入数据失败");
}
}
return billiardsCompetitionTotalData;
}
/**
* @param userId
* @param billiardsCompetitionBasic
* @param billiarbsCompetiionTotalData
* @return
*/
public BilliardsCompetitionTotalData inningResult(Long userId, BilliardsCompetitionBasic billiardsCompetitionBasic, BilliardsCompetitionTotalData billiarbsCompetiionTotalData) throws Exception {
Long winUserId = billiardsCompetitionBasic.getUser1P() < billiardsCompetitionBasic.getUser2P() ? billiardsCompetitionBasic.getUser2Id() : billiardsCompetitionBasic.getUser1Id();
Long winUserP = billiardsCompetitionBasic.getUser1P() > billiardsCompetitionBasic.getUser2P() ? billiardsCompetitionBasic.getUser1P() : billiardsCompetitionBasic.getUser2P();
Long failUserP = billiardsCompetitionBasic.getUser1P() < billiardsCompetitionBasic.getUser2P() ? billiardsCompetitionBasic.getUser1P() : billiardsCompetitionBasic.getUser2P();
//攻击力
BigDecimal userAggre=null;//攻击力参数
BigDecimal aa=new BigDecimal((billiardsCompetitionBasic.getUser1P() + billiardsCompetitionBasic.getUser2P()) * 800);
BigDecimal b=new BigDecimal((billiardsCompetitionBasic.getUser1P() + billiardsCompetitionBasic.getUser2P()) * 800)
.divide(new BigDecimal( getSeconds(billiardsCompetitionBasic.getStartTime(), billiardsCompetitionBasic.getEndTime())),2,BigDecimal.ROUND_DOWN);
BigDecimal ttt=new BigDecimal(userId.longValue()==winUserId.longValue()?(winUserP+5):(failUserP+2));
BigDecimal yy=new BigDecimal((userId.longValue()==winUserId.longValue()?(winUserP+winUserP+failUserP+222.1):(failUserP+winUserP+failUserP+222.1)));
BigDecimal c=ttt
.multiply(yy.setScale(2,BigDecimal.ROUND_DOWN));
userAggre=b.setScale(2,BigDecimal.ROUND_DOWN).multiply(c);
//向下取整
billiarbsCompetiionTotalData.setAddAggre(billiarbsCompetiionTotalData.getAddAggre()+userAggre.setScale(0, BigDecimal.ROUND_DOWN ).longValue());
//防御力
BigDecimal userDefend=null;//防御力参数
BigDecimal m=new BigDecimal(userId.longValue()==winUserId?winUserP:failUserP)
.add(new BigDecimal(1));
BigDecimal w= m.divide(new BigDecimal(winUserP+failUserP+1L),2,BigDecimal.ROUND_DOWN);
BigDecimal n=getWinRate(userId,billiardsCompetitionBasic,billiarbsCompetiionTotalData)
.multiply(new BigDecimal(12588))
.add(new BigDecimal(7200-getSeconds(billiardsCompetitionBasic.getStartTime(),billiardsCompetitionBasic.getEndTime())));
userDefend=w.multiply(n);
//向下取整
billiarbsCompetiionTotalData.setAddDefend(billiarbsCompetiionTotalData.getAddDefend()+userDefend.setScale(0,BigDecimal.ROUND_DOWN).longValue());
//gradeRate得分比
BigDecimal gradeRate=null;
BigDecimal aaaaa=new BigDecimal(userId.longValue()==winUserId.longValue()?winUserP:failUserP);
BigDecimal bbbbb=new BigDecimal(winUserP).add(new BigDecimal(failUserP));
gradeRate = new BigDecimal(userId.longValue()==winUserId.longValue()?winUserP:failUserP)
.divide(new BigDecimal(winUserP).add(new BigDecimal(failUserP)),3,BigDecimal.ROUND_DOWN)
.multiply(new BigDecimal(8.99))
.add(new BigDecimal(userId.longValue()==winUserId?1.01:0));
billiarbsCompetiionTotalData.setAddGradeRate(billiarbsCompetiionTotalData.getAddGradeRate().add(gradeRate.setScale(2,BigDecimal.ROUND_DOWN)));
//vrt战绩
BigDecimal a = null;
try {
BigDecimal q=new BigDecimal((billiardsCompetitionBasic.getUser1P() + billiardsCompetitionBasic.getUser2P()) * 360 );
BigDecimal qq=q.divide(new BigDecimal(getSeconds(billiardsCompetitionBasic.getStartTime(), billiardsCompetitionBasic.getEndTime())),3,BigDecimal.ROUND_CEILING);
BigDecimal qqq=qq.multiply(new BigDecimal((winUserId.longValue() == userId.longValue() ? winUserP:failUserP)+ 1));
BigDecimal qqqq=qqq.add(new BigDecimal( (billiardsCompetitionBasic.getUser1P() + billiardsCompetitionBasic.getUser2P()) * 0.20));
a = new BigDecimal((billiardsCompetitionBasic.getUser1P() + billiardsCompetitionBasic.getUser2P()) * 360 )
.divide(new BigDecimal(getSeconds(billiardsCompetitionBasic.getStartTime(), billiardsCompetitionBasic.getEndTime())),3,BigDecimal.ROUND_CEILING)
.multiply(new BigDecimal((winUserId.longValue() == userId.longValue() ? winUserP:failUserP)+ 1).setScale(2,BigDecimal.ROUND_DOWN))
.add(
new BigDecimal(userId.longValue()==winUserId.longValue()?winUserP:failUserP).add(new BigDecimal(1))
.divide(new BigDecimal(winUserP+failUserP+1),3, BigDecimal.ROUND_DOWN)
.multiply(new BigDecimal(4)));
} catch (ParseException e) {
e.printStackTrace();
}
BigDecimal sb=billiarbsCompetiionTotalData.getAddArt().add(a.setScale(2, BigDecimal.ROUND_DOWN));
billiarbsCompetiionTotalData.setAddArt(sb);
/**
* 判断对手数
*/
BilliardsCompetitionBasicExample example = new BilliardsCompetitionBasicExample();
example.or().andUser1IdEqualTo(billiardsCompetitionBasic.getUser1Id()).andUser2IdEqualTo(billiardsCompetitionBasic.getUser2Id());
example.or().andUser2IdEqualTo(billiardsCompetitionBasic.getUser1Id()).andUser1IdEqualTo(billiardsCompetitionBasic.getUser2Id());
List<BilliardsCompetitionBasic> isHiveBattle = billiardsCompetitionBasicMapper.selectByExample(example);
if (isHiveBattle == null || isHiveBattle.isEmpty()){
//是新对手
if(billiarbsCompetiionTotalData.getUserId().longValue()==winUserId.longValue()){
billiarbsCompetiionTotalData.setTotalFuckPers(billiarbsCompetiionTotalData.getTotalFuckPers()+1);
billiarbsCompetiionTotalData.setTotalPlayers(billiarbsCompetiionTotalData.getTotalPlayers()+1);
}else{
billiarbsCompetiionTotalData.setTotalFuckedPers(billiarbsCompetiionTotalData.getTotalFuckedPers()+1);
billiarbsCompetiionTotalData.setTotalPlayers(billiarbsCompetiionTotalData.getTotalPlayers()+1);
}
}else{
billiarbsCompetiionTotalData.setTotalFuckPers(billiarbsCompetiionTotalData.getTotalFuckPers());
billiarbsCompetiionTotalData.setTotalFuckedPers(billiarbsCompetiionTotalData.getTotalFuckedPers());
}
billiarbsCompetiionTotalData.setWinScenes(billiarbsCompetiionTotalData.getWinScenes()+(userId.longValue()==winUserId.longValue()?1L:0L));
billiarbsCompetiionTotalData.setTotalWinInnings(billiarbsCompetiionTotalData.getTotalWinInnings()+(userId.longValue()==winUserId.longValue()?winUserP:failUserP));
billiarbsCompetiionTotalData.setTotalInnings(winUserP+failUserP+billiarbsCompetiionTotalData.getTotalInnings());
billiarbsCompetiionTotalData.setTotalScenes(billiarbsCompetiionTotalData.getTotalScenes()+1);
billiarbsCompetiionTotalData.setAddSceneTime(billiarbsCompetiionTotalData.getAddSceneTime()+getSeconds(billiardsCompetitionBasic.getStartTime(), billiardsCompetitionBasic.getEndTime()));
return billiarbsCompetiionTotalData;
}
/**
* 获取时长换秒
* @param startTime
* @param endTime
* @throws ParseException
*/
public Long getSeconds(Date startTime, Date endTime) throws Exception {
long timeLong = (endTime.getTime()-startTime.getTime())/1000;
if(timeLong>=7200L||timeLong<=900L){
throw new Exception("比赛不算数");
}else{
return timeLong;
}
}
/**
*
* @param userId
* @param billiardsCompetitionBasic
* @param
* @return
*/
public BigDecimal getWinRate(Long userId,BilliardsCompetitionBasic billiardsCompetitionBasic,BilliardsCompetitionTotalData billiardsCompetitionTotalData){
//总场次
BilliardsCompetitionBasicExample example = new BilliardsCompetitionBasicExample();
BilliardsCompetitionBasicExample.Criteria c = example.createCriteria();
example.or().andUser1IdEqualTo(userId);
example.or().andUser2IdEqualTo(userId);
//总玩场次数
Long count = billiardsCompetitionBasicMapper.countByExample(example);
if(count==0){
return new BigDecimal(0);
}
//胜场次
BilliardsCompetitionBasicExample example1 = new BilliardsCompetitionBasicExample();
BilliardsCompetitionBasicExample.Criteria c1 = example.createCriteria();
Long winId=billiardsCompetitionBasic.getUser1P()>billiardsCompetitionBasic.getUser2P()?billiardsCompetitionBasic.getUser1Id():billiardsCompetitionBasic.getUser2Id();
example1.or().andUser1IdEqualTo(userId).andUser1PGreaterThan(billiardsCompetitionBasic.getUser2P());
example1.or().andUser2IdEqualTo(userId).andUser2PGreaterThan(billiardsCompetitionBasic.getUser1P());
Long winCount=billiardsCompetitionBasicMapper.countByExample(example1);
return new BigDecimal(winCount).divide(new BigDecimal(count),2,BigDecimal.ROUND_DOWN);
}
}
不分赛季和比赛类型计算的数据
package com.yuyuka.billiards.service.config;
import com.google.common.collect.Lists;
import com.yuyuka.billiards.service.manager.impl.total.BilliardsKoSetData;
import com.yuyuka.billiards.service.manager.impl.total.set.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
import java.util.List;
@Configuration
public class BilliarbsKoSetDataListConfigurtion {
@Resource
private BilliardsKoSetNewOpponentsData billiardsKoSetNewOpponentsData;
@Resource
private BilliardsKoSetSeasonData billiardsKoSetSeasonData;
@Resource
private BilliardsKoSetSeasonDbData billiardsKoSetSeasonDbData;
@Resource
private BilliardsKoSetTotalData billiardsKoSetTotalData;
@Bean
public List<BilliardsKoSetData> billiardsKoSetDataList(){
List<BilliardsKoSetData> returnValue = Lists.newArrayList();
returnValue.add(billiardsKoSetNewOpponentsData);
returnValue.add(billiardsKoSetSeasonDbData);
returnValue.add(billiardsKoSetSeasonData);
returnValue.add(billiardsKoSetTotalData);
return returnValue;
}
}
Configuration进行Bean配置,这样代码存入比赛信息代码就完成了。
@Configuration的使用
从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。*
写一个test进行测试
这里要注意要把代码块全设置成1.8,我这里报错
Error:java: Compilation failed: internal java compiler error
接口的实现类,里面写的根据基础表计算数据库信息的方法,并写入数据库中
接着写怎么从这些数据中取出数据算出最终结果
package com.yuyuka.billiards.api.dto;
import lombok.Data;
@Data
public class BilliardsTotalQueryDto {
private Long userId;
private String season;
private Long copId;
private String type;
}
写一个dto做筛选条件,因为有的数据是根据比赛类型,用户id,赛季算出来的。
package com.yuyuka.billiards.api.type;
public enum CompetitionTotalSelectTypeEnum {
// 我VRT
MY_CONFRONTATION(0,"我的对抗赛"),
SEASON_CONFRONTATION(1,"赛季对抗赛"),
ALL_CONFRONTATION(2,"竞技选手"),
MATCH_CASH(3,"现金赛"),
RANKING(4,"排位赛"),
SINGLE_RESULT(5,"对抗赛单场结果");
private int code;
private String info;
private String cache;
CompetitionTotalSelectTypeEnum(int code, String info) {
this.code = code;
this.info = info;
}
public CompetitionTotalSelectTypeEnum valueOf(int code){
switch (code){
case 0:
return MY_CONFRONTATION;
case 1:
return SEASON_CONFRONTATION;
case 2:
return ALL_CONFRONTATION;
case 3:
return MATCH_CASH;
case 4:
return RANKING;
case 5:
return SINGLE_RESULT;
default:
return null;
}
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public String getCache() {
return cache;
}
public void setCache(String cache) {
this.cache = cache;
}
}
枚举
package com.yuyuka.billiards.service.manager.impl.total;
import com.yuyuka.billiards.api.dto.BilliardsTotalQueryDto;
import java.util.HashMap;
public interface BilliardsKoGetData {
/**
* 获取用户数据
* @param billiardsTotalQueryDto 用户的查询对象
* @return
*/
public HashMap getDetailData(BilliardsTotalQueryDto billiardsTotalQueryDto);
}
写个接口,实现方法,以下五个类都要继承接口
package com.yuyuka.billiards.service.manager.impl.total.get;
import com.yuyuka.billiards.api.dto.BilliardsTotalQueryDto;
import com.yuyuka.billiards.api.dto.BilliardsTotalReturnBaseDto;
import com.yuyuka.billiards.service.dao.BilliardsCompetitionSeasonDataMapper;
import com.yuyuka.billiards.service.domain.BilliardsCompetitionSeasonData;
import com.yuyuka.billiards.service.domain.BilliardsCompetitionSeasonDataExample;
import com.yuyuka.billiards.service.manager.impl.total.BilliardsKoGetData;
import lombok.Builder;
import lombok.Data;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
@Component
public class BilliardsKoGetSingleResultData implements BilliardsKoGetData<BilliardsTotalQueryDto> {
@Resource
private BilliardsCompetitionSeasonDataMapper billiardsCompetitionSeasonDataMapper;
private BilliardsCompetitionSeasonData billiardsCompetitionSeasonData;
@Override
public BilliardsTotalReturnBaseDto<SingleResultData> getDetailData(BilliardsTotalQueryDto billiardsTotalQueryDto){
BilliardsCompetitionSeasonDataExample example = new BilliardsCompetitionSeasonDataExample();
BilliardsCompetitionSeasonDataExample.Criteria c = example.createCriteria();
c.andUserIdEqualTo(billiardsTotalQueryDto.getUserId()).andTypeEqualTo(billiardsTotalQueryDto.getType()).andSeasonEqualTo(billiardsTotalQueryDto.getSeason());
List<BilliardsCompetitionSeasonData> lists = billiardsCompetitionSeasonDataMapper.selectByExample(example);
if(lists==null&&lists.size()==0){
billiardsCompetitionSeasonData=new BilliardsCompetitionSeasonData();
}else{
billiardsCompetitionSeasonData=lists.get(0);
}
BigDecimal vrt=billiardsCompetitionSeasonData.getVrt().setScale(1,BigDecimal.ROUND_DOWN);
BigDecimal gradeRate=billiardsCompetitionSeasonData.getGradeRate();
Long aggre=billiardsCompetitionSeasonData.getAggre();
Long defend=billiardsCompetitionSeasonData.getDefend();
Long singleTime=billiardsCompetitionSeasonData.getSceneLong();
return new BilliardsTotalReturnBaseDto(new SingleResultData()
.setAggre(aggre)
.setDefend(defend)
.setGradeRate(gradeRate)
.setSingleTime(singleTime)
.setVrt(vrt));
}
@Data
public class SingleResultData{
BigDecimal vrt;
BigDecimal gradeRate;
Long aggre;
Long defend;
Long singleTime;
public SingleResultData setVrt(BigDecimal vrt) {
this.vrt = vrt;return this;
}
public SingleResultData setGradeRate(BigDecimal gradeRate) {
this.gradeRate = gradeRate;return this;
}
public SingleResultData setAggre(Long aggre) {
this.aggre = aggre;return this;
}
public SingleResultData setDefend(Long defend) {
this.defend = defend;return this;
}
public SingleResultData setSingleTime(Long singleTime) {
this.singleTime = singleTime;
return this;
}
}
}
奖金赛计算法
package com.yuyuka.billiards.service.manager.impl.total.get;
import com.yuyuka.billiards.api.dto.BilliardsTotalQueryDto;
import com.yuyuka.billiards.api.dto.BilliardsTotalReturnBaseDto;
import com.yuyuka.billiards.service.dao.BilliardsCompetitionSeasonDbMapper;
import com.yuyuka.billiards.service.domain.BilliardsCompetitionSeasonDb;
import com.yuyuka.billiards.service.domain.BilliardsCompetitionSeasonDbExample;
import com.yuyuka.billiards.service.manager.impl.total.BilliardsKoGetData;
import lombok.Builder;
import lombok.Data;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
@Component
public class BilliardsKoGetMatchCashData implements BilliardsKoGetData<BilliardsTotalQueryDto> {
@Resource
private BilliardsCompetitionSeasonDbMapper billiardsCompetitionSeasonDbMapper;
private BilliardsCompetitionSeasonDb billiardsCompetitionSeasonDb;
@Override
public BilliardsTotalReturnBaseDto<MatchCashData> getDetailData(BilliardsTotalQueryDto billiardsTotalQueryDto) {
BilliardsCompetitionSeasonDbExample example =new BilliardsCompetitionSeasonDbExample();
BilliardsCompetitionSeasonDbExample.Criteria c =example.createCriteria();
c.andUserIdEqualTo(billiardsTotalQueryDto.getUserId()).andTypeEqualTo(billiardsTotalQueryDto.getType()).andSeasonEqualTo(billiardsTotalQueryDto.getSeason());
List<BilliardsCompetitionSeasonDb> lists=billiardsCompetitionSeasonDbMapper.selectByExample(example);
if(lists == null && lists.size() == 0){
billiardsCompetitionSeasonDb=new BilliardsCompetitionSeasonDb();
}else{
billiardsCompetitionSeasonDb=lists.get(0);
}
BigDecimal avgVrt=billiardsCompetitionSeasonDb.getAddArt().divide(new BigDecimal(billiardsCompetitionSeasonDb.getTotalScenes()),2,BigDecimal.ROUND_DOWN);
BigDecimal avgGradeRate=billiardsCompetitionSeasonDb.getAddGradeRate().divide(new BigDecimal(billiardsCompetitionSeasonDb.getTotalScenes()),2,BigDecimal.ROUND_DOWN);
Long avgAggre=billiardsCompetitionSeasonDb.getAddAggre()/billiardsCompetitionSeasonDb.getTotalScenes();
BigDecimal a= new BigDecimal(billiardsCompetitionSeasonDb.getAddDefend()).divide(new BigDecimal(billiardsCompetitionSeasonDb.getTotalScenes()),4,BigDecimal.ROUND_DOWN);
Long avgDefend=billiardsCompetitionSeasonDb.getAddDefend()/billiardsCompetitionSeasonDb.getTotalScenes();
Long avgInningLong=billiardsCompetitionSeasonDb.getAddSceneTime()/billiardsCompetitionSeasonDb.getTotalInnings();
Long avgSceneLong=billiardsCompetitionSeasonDb.getAddSceneTime()/billiardsCompetitionSeasonDb.getTotalScenes();
Long totalScenes=billiardsCompetitionSeasonDb.getTotalScenes();
BigDecimal q =new BigDecimal(billiardsCompetitionSeasonDb.getTotalScenes());
BigDecimal b=new BigDecimal(billiardsCompetitionSeasonDb.getTotalWinScenes());
String WinRate=(new BigDecimal(billiardsCompetitionSeasonDb.getTotalWinScenes()).divide(new BigDecimal(billiardsCompetitionSeasonDb.getTotalScenes()),2,BigDecimal.ROUND_DOWN)).toString();
Long fuckPers=billiardsCompetitionSeasonDb.getTotalFuckPers();
Long playWithPers=billiardsCompetitionSeasonDb.getTotalPlayers();
return new BilliardsTotalReturnBaseDto( new MatchCashData()
.setAvgVrt(avgVrt)
.setAvgAggre(avgAggre)
.setAvgGradeRate(avgGradeRate)
.setAvgDefend(avgDefend)
.setAvgDefend(avgDefend)
.setAvgInningLong(avgInningLong)
.setAvgSceneLong(avgSceneLong)
.setTotalScenes(totalScenes)
.setWinRate(WinRate)
.setFuckPers(fuckPers)
.setPlayWithPers(playWithPers));
}
@Data
public class MatchCashData{
BigDecimal avgVrt;
BigDecimal avgGradeRate;
Long avgAggre;
Long avgDefend;
Long avgInningLong;
Long avgSceneLong;
Long totalScenes;
String winRate;
Long fuckPers;
Long playWithPers;
public MatchCashData setAvgVrt(BigDecimal avgVrt) {
this.avgVrt = avgVrt;return this;
}
public MatchCashData setAvgGradeRate(BigDecimal avgGradeRate) {
this.avgGradeRate = avgGradeRate;return this;
}
public MatchCashData setAvgAggre(Long avgAggre) {
this.avgAggre = avgAggre;return this;
}
public MatchCashData setAvgDefend(Long avgDefend) {
this.avgDefend = avgDefend;return this;
}
public MatchCashData setAvgInningLong(Long avgInningLong) {
this.avgInningLong = avgInningLong;return this;
}
public MatchCashData setAvgSceneLong(Long avgSceneLong) {
this.avgSceneLong = avgSceneLong;return this;
}
public MatchCashData setTotalScenes(Long totalScenes) {
this.totalScenes = totalScenes;return this;
}
public MatchCashData setWinRate(String winRate) {
this.winRate = winRate;return this;
}
public MatchCashData setFuckPers(Long fuckPers) {
this.fuckPers = fuckPers;return this;
}
public MatchCashData setPlayWithPers(Long playWithPers) {
this.playWithPers = playWithPers;
return this;
}
}
}
排位赛方法
package com.yuyuka.billiards.service.manager.impl.total.get;
import com.yuyuka.billiards.api.dto.BilliardsTotalQueryDto;
import com.yuyuka.billiards.api.dto.BilliardsTotalReturnBaseDto;
import com.yuyuka.billiards.service.dao.BilliardsCompetitionSeasonDbMapper;
import com.yuyuka.billiards.service.domain.BilliardsCompetitionSeasonDbExample;
import com.yuyuka.billiards.service.domain.BilliardsCompetitionSeasonDb;
import com.yuyuka.billiards.service.manager.impl.total.BilliardsKoGetData;
import lombok.Builder;
import lombok.Data;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.List;
@Component
public class BilliardsKoGetRankingData implements BilliardsKoGetData<BilliardsTotalQueryDto> {
@Resource
private BilliardsCompetitionSeasonDbMapper billiardsCompetitionSeasonDbMapper;
private BilliardsCompetitionSeasonDb billiardsCompetitionSeasonDb;
@Override
public BilliardsTotalReturnBaseDto<RankingData> getDetailData(BilliardsTotalQueryDto billiardsTotalQueryDto) {
HashMap<String,String> map =new HashMap<String,String>();
BilliardsCompetitionSeasonDbExample billiardsCompetitionSeasonDbExample = new BilliardsCompetitionSeasonDbExample();
BilliardsCompetitionSeasonDbExample.Criteria c = billiardsCompetitionSeasonDbExample.createCriteria();
c.andUserIdEqualTo(billiardsTotalQueryDto.getUserId());
c.andSeasonEqualTo(billiardsTotalQueryDto.getSeason());
c.andTypeEqualTo(billiardsTotalQueryDto.getType());
List<BilliardsCompetitionSeasonDb> billiardsCompetitionSeasonDbList = billiardsCompetitionSeasonDbMapper.selectByExample(billiardsCompetitionSeasonDbExample);
if (billiardsCompetitionSeasonDbList == null && billiardsCompetitionSeasonDbList.size() == 0) {
billiardsCompetitionSeasonDb = new BilliardsCompetitionSeasonDb();
}else{
billiardsCompetitionSeasonDb = billiardsCompetitionSeasonDbList.get(0);
}
BigDecimal avgVrt=billiardsCompetitionSeasonDb.getAddArt().divide(new BigDecimal(billiardsCompetitionSeasonDb.getTotalScenes()),2,BigDecimal.ROUND_DOWN);
BigDecimal avgGradeRate=billiardsCompetitionSeasonDb.getAddGradeRate().divide(new BigDecimal(billiardsCompetitionSeasonDb.getTotalScenes()),2,BigDecimal.ROUND_DOWN);
Long avgAggre=billiardsCompetitionSeasonDb.getAddAggre()/billiardsCompetitionSeasonDb.getTotalScenes();
Long avgDefend=billiardsCompetitionSeasonDb.getAddDefend()/billiardsCompetitionSeasonDb.getTotalScenes();
Long avgInningLong=billiardsCompetitionSeasonDb.getAddSceneTime()/billiardsCompetitionSeasonDb.getTotalInnings();
Long totalInnings=billiardsCompetitionSeasonDb.getTotalInnings();
Long totalTime=billiardsCompetitionSeasonDb.getAddSceneTime();
Long avgSceneLong=billiardsCompetitionSeasonDb.getAddSceneTime()/billiardsCompetitionSeasonDb.getTotalScenes();
Long totalScenes=billiardsCompetitionSeasonDb.getTotalScenes();
String WinRate=(new BigDecimal(billiardsCompetitionSeasonDb.getTotalWinScenes()).divide(new BigDecimal(billiardsCompetitionSeasonDb.getTotalScenes()),3,BigDecimal.ROUND_DOWN)).toString();
Long fuckPers=billiardsCompetitionSeasonDb.getTotalFuckPers();
Long playWithPers=billiardsCompetitionSeasonDb.getTotalPlayers();
//
// map.put("avgVrt",avgVrt.toString());
// map.put("avgGradeRate",avgGradeRate.toString());
// map.put("avgAggre",avgAggre.toString());
// map.put("avgDefend",avgDefend.toString());
// map.put("avgInningLong",avgInningLong.toString());
// map.put("totalInnings",totalInnings.toString());
// map.put("totalTime",totalTime.toString());
// map.put("avgSceneLong",avgSceneLong.toString());
// map.put("totalScenes",totalScenes.toString());
// map.put("WinRate",WinRate);
// map.put("fuckPers",fuckPers.toString());
// map.put("playWithPers",playWithPers.toString());
//
// return map;
return new BilliardsTotalReturnBaseDto( new RankingData()
.setAvgVrt(avgVrt)
.setAvgAggre(avgAggre)
.setAvgGradeRate(avgGradeRate)
.setAvgDefend(avgDefend)
.setAvgDefend(avgDefend)
.setAvgInningLong(avgInningLong)
.setAvgSceneLong(avgSceneLong)
.setTotalScenes(totalScenes)
.setWinRate(WinRate)
.setFuckPers(fuckPers)
.setPlayWithPers(playWithPers));
}
@Data
public class RankingData{
BigDecimal avgVrt;
BigDecimal avgGradeRate;
Long avgAggre;
Long avgDefend;
Long avgInningLong;
Long avgSceneLong;
Long totalScenes;
String winRate;
Long fuckPers;
Long playWithPers;
public RankingData setAvgVrt(BigDecimal avgVrt) {
this.avgVrt = avgVrt;
return this;
}
public RankingData setAvgGradeRate(BigDecimal avgGradeRate) {
this.avgGradeRate = avgGradeRate;return this;
}
public RankingData setAvgAggre(Long avgAggre) {
this.avgAggre = avgAggre;return this;
}
public RankingData setAvgDefend(Long avgDefend) {
this.avgDefend = avgDefend;return this;
}
public RankingData setAvgInningLong(Long avgInningLong) {
this.avgInningLong = avgInningLong;return this;
}
public RankingData setAvgSceneLong(Long avgSceneLong) {
this.avgSceneLong = avgSceneLong;return this;
}
public RankingData setTotalScenes(Long totalScenes) {
this.totalScenes = totalScenes;return this;
}
public RankingData setWinRate(String winRate) {
this.winRate = winRate;return this;
}
public RankingData setFuckPers(Long fuckPers) {
this.fuckPers = fuckPers;return this;
}
public RankingData setPlayWithPers(Long playWithPers) {
this.playWithPers = playWithPers;return this;
}
}
}
对抗赛
以上三种比赛就是三个比赛类型的数据结算
package com.yuyuka.billiards.service.manager.impl.total.get;
import com.yuyuka.billiards.api.dto.BilliardsTotalQueryDto;
import com.yuyuka.billiards.api.dto.BilliardsTotalReturnBaseDto;
import com.yuyuka.billiards.service.dao.BilliardsCompetitionNewOpponentsDataMapper;
import com.yuyuka.billiards.service.domain.BilliardsCompetitionNewOpponentsData;
import com.yuyuka.billiards.service.domain.BilliardsCompetitionNewOpponentsDataExample;
import com.yuyuka.billiards.service.manager.impl.total.BilliardsKoGetData;
import lombok.Builder;
import lombok.Data;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.List;
@Component
public class BilliardsKoGetMyConfrontationData implements BilliardsKoGetData<BilliardsTotalQueryDto> {
@Resource
private BilliardsCompetitionNewOpponentsDataMapper billiardsCompetitionNewOpponentsDataMapper;
private BilliardsCompetitionNewOpponentsData billiardsCompetitionNewOpponentsData;
@Override
public BilliardsTotalReturnBaseDto<MatchData> getDetailData(BilliardsTotalQueryDto billiardsTotalQueryDto){
BilliardsCompetitionNewOpponentsDataExample example1=new BilliardsCompetitionNewOpponentsDataExample();
BilliardsCompetitionNewOpponentsDataExample.Criteria d=example1.createCriteria();
d.andUserIdEqualTo(billiardsTotalQueryDto.getUserId()).andTypeEqualTo(billiardsTotalQueryDto.getType()).andSeasonEqualTo(billiardsTotalQueryDto.getSeason());
List<BilliardsCompetitionNewOpponentsData> list2 = billiardsCompetitionNewOpponentsDataMapper.selectByExample(example1);
if((list2==null&&list2.size()==0)){
billiardsCompetitionNewOpponentsData=new BilliardsCompetitionNewOpponentsData();
}else{
billiardsCompetitionNewOpponentsData=list2.get(0);
}
HashMap<String,String>map=new HashMap<>();
Long totalFucks=billiardsCompetitionNewOpponentsData.getTotalFucks();
Long totalFuckeds=billiardsCompetitionNewOpponentsData.getTotalFuckeds();
Long totalPlayers=billiardsCompetitionNewOpponentsData.getTotalPalyers();
Long winOrFails=totalFuckeds+totalFucks-totalPlayers;
Long avgWinTime=billiardsCompetitionNewOpponentsData.getTotalFirstWintime()/billiardsCompetitionNewOpponentsData.getTotalPalyers();
Long avgFailTime=billiardsCompetitionNewOpponentsData.getTotalFirstFailtime()/billiardsCompetitionNewOpponentsData.getTotalPalyers();
DecimalFormat df=new DecimalFormat("0.00%");
String winRate=(new BigDecimal(billiardsCompetitionNewOpponentsData.getTotalFucks()).divide(new BigDecimal(billiardsCompetitionNewOpponentsData.getTotalPalyers()),3,BigDecimal.ROUND_DOWN)).toString();
return new BilliardsTotalReturnBaseDto(new MatchData()
.setTotalFucks(totalFucks)
.setTotalFuckeds(totalFuckeds)
.setWinOrFails(winOrFails)
.setTotalPlayers(totalPlayers)
.setWinRate(winRate)
.setAvgWinTime(avgWinTime)
.setAvgFailTime(avgFailTime));
}
@Data
public class MatchData{
Long totalFucks;
Long totalFuckeds;
Long winOrFails;
Long totalPlayers;
String winRate;
Long avgWinTime;
Long avgFailTime;
public MatchData setTotalFucks(Long totalFucks) {
this.totalFucks = totalFucks;return this;
}
public MatchData setTotalFuckeds(Long totalFuckeds) {
this.totalFuckeds = totalFuckeds;return this;
}
public MatchData setWinOrFails(Long winOrFails) {
this.winOrFails = winOrFails;return this;
}
public MatchData setTotalPlayers(Long totalPlayers) {
this.totalPlayers = totalPlayers;return this;
}
public MatchData setWinRate(String winRate) {
this.winRate = winRate;
return this;
}
public MatchData setAvgWinTime(Long avgWinTime) {
this.avgWinTime = avgWinTime;
return this;
}
public MatchData setAvgFailTime(Long avgFailTime) {
this.avgFailTime = avgFailTime;
return this;
}
}
}
package com.yuyuka.billiards.service.manager.impl.total.get;
import com.yuyuka.billiards.api.dto.BilliardsTotalQueryDto;
import com.yuyuka.billiards.api.dto.BilliardsTotalReturnBaseDto;
import com.yuyuka.billiards.service.dao.BilliardsCompetitionSeasonDbMapper;
import com.yuyuka.billiards.service.domain.BilliardsCompetitionSeasonDb;
import com.yuyuka.billiards.service.domain.BilliardsCompetitionSeasonDbExample;
import com.yuyuka.billiards.service.manager.impl.total.BilliardsKoGetData;
import lombok.Data;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.List;
/**
* 我的对抗赛
*/
@Component
public class BilliardsKoGetSeasonConfrontationData implements BilliardsKoGetData<BilliardsTotalQueryDto> {
@Resource
private BilliardsCompetitionSeasonDbMapper billiardsCompetitionSeasonDbMapper;
private BilliardsCompetitionSeasonDb billiardsCompetitionSeasonDb;
@Override
public BilliardsTotalReturnBaseDto<SeasonConfrontationData> getDetailData(BilliardsTotalQueryDto billiardsTotalQueryDto) {
HashMap<String,String> map =new HashMap<String,String>();
Long userId=billiardsTotalQueryDto.getUserId();
BilliardsCompetitionSeasonDbExample billiardsCompetitionSeasonDbExample = new BilliardsCompetitionSeasonDbExample();
BilliardsCompetitionSeasonDbExample.Criteria c = billiardsCompetitionSeasonDbExample.createCriteria();
c.andUserIdEqualTo(billiardsTotalQueryDto.getUserId());
c.andSeasonEqualTo(billiardsTotalQueryDto.getSeason());
c.andTypeEqualTo(billiardsTotalQueryDto.getType());
List<BilliardsCompetitionSeasonDb> billiardsCompetitionSeasonDbList = billiardsCompetitionSeasonDbMapper.selectByExample(billiardsCompetitionSeasonDbExample);
if (billiardsCompetitionSeasonDbList == null && billiardsCompetitionSeasonDbList.size() == 0) {
billiardsCompetitionSeasonDb = new BilliardsCompetitionSeasonDb();
}else{
billiardsCompetitionSeasonDb = billiardsCompetitionSeasonDbList.get(0);
}
BigDecimal avgVrt=billiardsCompetitionSeasonDb.getAddArt().divide(new BigDecimal(billiardsCompetitionSeasonDb.getTotalScenes()),2,BigDecimal.ROUND_DOWN);
BigDecimal avgGradeRate=billiardsCompetitionSeasonDb.getAddGradeRate().divide(new BigDecimal(billiardsCompetitionSeasonDb.getTotalScenes()),2,BigDecimal.ROUND_DOWN);
Long avgAggre=billiardsCompetitionSeasonDb.getAddAggre()/billiardsCompetitionSeasonDb.getTotalScenes();
Long avgDefend=billiardsCompetitionSeasonDb.getAddDefend()/billiardsCompetitionSeasonDb.getTotalScenes();
Long avgInningLong=billiardsCompetitionSeasonDb.getAddSceneTime()/billiardsCompetitionSeasonDb.getTotalInnings();
Long totalInnings=billiardsCompetitionSeasonDb.getTotalInnings();
Long totalTime=billiardsCompetitionSeasonDb.getAddSceneTime();
Long avgSceneLong=billiardsCompetitionSeasonDb.getAddSceneTime()/billiardsCompetitionSeasonDb.getTotalScenes();
Long totalScenes=billiardsCompetitionSeasonDb.getTotalScenes();
String WinRate=(new BigDecimal(billiardsCompetitionSeasonDb.getTotalWinScenes()).divide(new BigDecimal(billiardsCompetitionSeasonDb.getTotalScenes()),2,BigDecimal.ROUND_DOWN)).toString();
Long fuckPers=billiardsCompetitionSeasonDb.getTotalFuckPers();
Long playWithPers=billiardsCompetitionSeasonDb.getTotalPlayers();
return new BilliardsTotalReturnBaseDto(new SeasonConfrontationData()
.setAvgVrt(avgVrt)
.setAvgAggre(avgAggre)
.setAvgGradeRate(avgGradeRate)
.setAvgDefend(avgDefend)
.setAvgDefend(avgDefend)
.setAvgInningLong(avgInningLong)
.setAvgSceneLong(avgSceneLong)
.setTotalScenes(totalScenes)
.setWinRate(WinRate)
.setFuckPers(fuckPers)
.setPlayWithPers(playWithPers));
}
@Data
public class SeasonConfrontationData{
BigDecimal avgVrt;
BigDecimal avgGradeRate;
Long avgAggre;
Long avgDefend;
Long avgInningLong;
Long avgSceneLong;
Long totalScenes;
String winRate;
Long fuckPers;
Long playWithPers;
public SeasonConfrontationData setAvgVrt(BigDecimal avgVrt) {
this.avgVrt = avgVrt;
return this;
}
public SeasonConfrontationData setAvgGradeRate(BigDecimal avgGradeRate) {
this.avgGradeRate = avgGradeRate;return this;
}
public SeasonConfrontationData setAvgAggre(Long avgAggre) {
this.avgAggre = avgAggre;return this;
}
public SeasonConfrontationData setAvgDefend(Long avgDefend) {
this.avgDefend = avgDefend;return this;
}
public SeasonConfrontationData setAvgInningLong(Long avgInningLong) {
this.avgInningLong = avgInningLong;return this;
}
public SeasonConfrontationData setAvgSceneLong(Long avgSceneLong) {
this.avgSceneLong = avgSceneLong;return this;
}
public SeasonConfrontationData setTotalScenes(Long totalScenes) {
this.totalScenes = totalScenes;return this;
}
public SeasonConfrontationData setWinRate(String winRate) {
this.winRate = winRate;return this;
}
public SeasonConfrontationData setFuckPers(Long fuckPers) {
this.fuckPers = fuckPers;return this;
}
public SeasonConfrontationData setPlayWithPers(Long playWithPers) {
this.playWithPers = playWithPers;return this;
}
}
}
接着是用户查看自己的比赛结果,比如你打完对抗赛,看看自己得分战绩等等什么分数啦,这个也分赛季和比赛类型的。
怎么取某一个赛季和比赛类型呢:
package com.yuyuka.billiards.api.dto;
import lombok.Data;
@Data
public class BilliardsTotalQueryDto {
private Long userId;
private String season;
private Long copId;
private String type;
}
那就在这个类中定义,season就是某个赛季,然后type输入赛季类型,比如奖金赛,然后输入用户id,你就能看见自己的某场比赛得分了,copId是比赛id和type重复了,所以这个类引用对象会加在里面。
package com.yuyuka.billiards.service.manager.impl;
import com.yuyuka.billiards.api.dto.BilliardsTotalQueryDto;
import com.yuyuka.billiards.api.type.CompetitionTotalSelectTypeEnum;
import com.yuyuka.billiards.service.manager.AbstractbManager;
import com.yuyuka.billiards.service.manager.BilliardsKoGetDetailsManager;
import com.yuyuka.billiards.service.manager.impl.total.get.*;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@Component("BilliarbsKoGetDetailsManager")
public class BilliardsKoGetDetailsImpl extends AbstractbManager implements BilliardsKoGetDetailsManager {
@Resource
private BilliardsKoGetMatchCashData billiardsKoGetMatchCashData;
@Resource
private BilliardsKoGetMyConfrontationData billiardsKoGetMyConfrontationData;
@Resource
private BilliardsKoGetRankingData billiardsKoGetRankingData;
@Resource
private BilliardsKoGetSeasonConfrontationData billiardsKoGetSeasonConfrontationData;
@Resource
private BilliardsKoGetSingleResultData billiardsKoGetSingleResultData;
/**
* 执行get数据
* @param cometitionTotalSelectTypeEnum
* @return
*/
@Override
public HashMap getCompetitionDetail(CompetitionTotalSelectTypeEnum cometitionTotalSelectTypeEnum,BilliardsTotalQueryDto billiardsTotalQueryDto) {
// billiardsKoGetMatchCashData.getDetailData(billiardsTotalQueryDto);
// billiardsKoGetMyConfrontationData.getDetailData(billiardsTotalQueryDto);
// billiardsKoGetRankingData.getDetailData(billiardsTotalQueryDto);
// billiardsKoGetSeasonConfrontationData.getDetailData(billiardsTotalQueryDto);
// billiardsKoGetSingleResultData.getDetailData(billiardsTotalQueryDto);
HashMap<String,List<HashMap>> map =new HashMap<>();
List <HashMap> lists =new ArrayList<>();
String company="哟哟咔";
lists.add(billiardsKoGetMatchCashData.getDetailData(billiardsTotalQueryDto));
lists.add(billiardsKoGetMyConfrontationData.getDetailData(billiardsTotalQueryDto));
lists.add(billiardsKoGetRankingData.getDetailData(billiardsTotalQueryDto));
lists.add(billiardsKoGetSeasonConfrontationData.getDetailData(billiardsTotalQueryDto));
lists.add(billiardsKoGetSingleResultData.getDetailData(billiardsTotalQueryDto));
map.put(company,lists);
return map;
}
}
接下来这个类就是负责执行这些方法,并把执行返回的hashmap存放到hashmap<String,List>中,这里的String可以放用户id或者其他什么的,list负责放用户id计算得出的结果。
接下来就是老套路,写个方法测试类了
package com.yuyuka.billiards.service.manager.impl.total.set;
import com.yuyuka.billiards.api.dto.BilliardsTotalQueryDto;
import com.yuyuka.billiards.api.dto.BilliardsTotalReturnBaseDto;
import com.yuyuka.billiards.api.type.CompetitionTotalSelectTypeEnum;
import com.yuyuka.billiards.service.BootStrap;
import com.yuyuka.billiards.service.domain.BilliardsCompetitionBasic;
import com.yuyuka.billiards.service.manager.BilliardsKoGetDetailsManager;
import com.yuyuka.billiards.service.manager.BilliardsKoSetDetailsManager;
import com.yuyuka.billiards.service.manager.impl.total.get.BilliardsKoGetSingleResultData;
import com.yuyuka.billiards.service.message.impl.ActiveMqJmsProduct;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.HashMap;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = BootStrap.class)
public class ActivemqGetDatasTest<billiardsKoSetDetialsManger> {
@Resource
private ActiveMqJmsProduct activeMqJmsProduct;
@Resource
private BilliardsKoGetDetailsManager billiardsKoGetDetailsManager;
@Resource
private BilliardsKoSetDetailsManager billiardsKoSetDetailsManager;
@Test
public void putDetailData(){
BilliardsTotalQueryDto billiardsTotalQueryDto =new BilliardsTotalQueryDto();
billiardsTotalQueryDto.setCopId(001L);
billiardsTotalQueryDto.setSeason("1");
billiardsTotalQueryDto.setType("1l");
billiardsTotalQueryDto.setUserId(1l);
BilliardsCompetitionBasic billiardsCompetitionBasic = new BilliardsCompetitionBasic();
billiardsCompetitionBasic.setCopId(001L);
try {
billiardsCompetitionBasic.setStartTime(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse("2019-10-5 00:00:00"));
billiardsCompetitionBasic.setEndTime(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse("2019-10-5 00:15:00"));
} catch (ParseException e) {
e.printStackTrace();
}
billiardsCompetitionBasic.setUser1Id(1l);
billiardsCompetitionBasic.setUser2Id(2l);
billiardsCompetitionBasic.setSeason("1");
billiardsCompetitionBasic.setType("1l");
billiardsCompetitionBasic.setUser1P(1l);
billiardsCompetitionBasic.setUser2P(5l);
billiardsCompetitionBasic.setFailUserid(1l);
// for (int i = 0;i < 10;i ++)
activeMqJmsProduct.sendCompetitionData(billiardsCompetitionBasic);
}
@Test
public void getDetail(){
BilliardsTotalQueryDto billiardsTotalQueryDto =new BilliardsTotalQueryDto();
billiardsTotalQueryDto.setCopId(001L);
billiardsTotalQueryDto.setSeason("1");
billiardsTotalQueryDto.setType("1l");
billiardsTotalQueryDto.setUserId(2l);
CompetitionTotalSelectTypeEnum competitionTotalSelectTypeEnum[] = CompetitionTotalSelectTypeEnum.values();
Arrays.asList(competitionTotalSelectTypeEnum).stream().forEach(typeEnum ->{
BilliardsTotalReturnBaseDto dto = billiardsKoGetDetailsManager.getCompetitionDetail(typeEnum,billiardsTotalQueryDto);
System.out.println("map type ["+typeEnum.getInfo()+"] value [" +dto+"]");
});
}
}
先set后get不然会报null异常:执行的getxxx方法你可以print打印出结果看看对不对呗。