做一个类似王者农药的存取用户比赛信息代码

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值