我们要根据用户比赛信息,算出各种计算结果,比如攻击力,防御力,得分比,战绩之类的,并插入用户数据,公式如下,经过思考,我做了基础表,通过查数来计算二级表,将二级表存入数据库,从数据库取出二级表的已知条件算出三级表的最终数据 依据如下公式来算出个组数据 基础表 新对手表 每场比赛都会返回的数据 每个赛季每种比赛类型都会返回的表数据,有点类似王者农药那种 不分赛季部分比赛类型的表 至于代码:逆向工程先生成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打印出结果看看对不对呗。