From 5c86fdc0b8e3fb2713163139453149d6da30f5f1 Mon Sep 17 00:00:00 2001 From: tianea <tianxyy80@gmail.com> Date: Wed, 6 Apr 2022 23:49:00 +0800 Subject: [PATCH] =?UTF-8?q?docker=20=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- front/src/components/footer.vue | 6 +- front/src/router/index.js | 1 - front/src/views/competition/ranking.vue | 4 +- front/src/views/competition/second.vue | 65 ++++++--- front/src/views/login/index.vue | 14 +- front/src/views/member/index.vue | 2 +- front/src/views/system/exam.vue | 3 +- front/src/views/system/index.vue | 6 - .../src/main/resources/logback-tz.xml | 2 +- .../src/main/resources/system.properties | 2 +- tz/common/common-service/pom.xml | 8 +- tz/competition/competition-service/Dockerfile | 8 ++ .../api/ApiCompetitionRankingController.java | 21 ++- .../competitiion/api/biz/ApiRankingBiz.java | 99 ++++++++++++++ .../competitiion/api/dto/RankingDTO.java | 128 +++++++++++++++++- .../competitiion/job/CompetitionJob.java | 4 +- .../job/biz/CompetitionJobBiz.java | 4 + .../competitiion/job/biz/RankingBiz.java | 88 ++++++++---- .../pc/CompetitionController.java | 5 + .../competitiion/pc/biz/PCCompetitionBiz.java | 20 ++- .../com/tz/platform/entity/Competition.java | 5 - .../com/tz/platform/juejin/JueJinApi.java | 11 +- .../repository/CompetitionMemberDao.java | 9 ++ .../tz/platform/repository/RankingDao.java | 1 + .../src/main/resources/bootstrap.yml | 2 +- tz/competition/pom.xml | 10 +- tz/docker-compose.yml | 96 +++++++++++++ tz/exam/exam-service/Dockerfile | 8 ++ tz/exam/exam-service/pom.xml | 10 ++ .../src/main/resources/bootstrap.yml | 5 - tz/gateway/Dockerfile | 8 ++ tz/gateway/pom.xml | 16 +-- tz/pom.xml | 14 +- tz/system/system-service/Dockerfile | 8 ++ tz/system/system-service/pom.xml | 9 ++ .../platform/system/api/SystemController.java | 17 +++ .../tz/platform/system/api/biz/SystemBiz.java | 18 +++ tz/upload/upload-service/Dockerfile | 8 ++ tz/upload/upload-service/pom.xml | 11 ++ tz/user/user-service/Dockerfile | 8 ++ tz/user/user-service/pom.xml | 10 ++ .../user/api/UserLoginController.java | 9 ++ .../user/api/biz/ApiUserLoginBiz.java | 18 +++ .../user/auth/biz/AuthUserInfoBiz.java | 6 +- .../tz/platform/user/chunzhen/IPSeeker.java | 27 +++- .../user/pc/PcUserInfoController.java | 5 + .../platform/user/pc/biz/PcUserInfoBiz.java | 33 +++++ .../com/tz/platform/user/pc/vo/UserVO.java | 1 + .../src/main/resources/bootstrap.yml | 2 +- 49 files changed, 755 insertions(+), 120 deletions(-) create mode 100644 tz/competition/competition-service/Dockerfile create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/ApiRankingBiz.java create mode 100644 tz/docker-compose.yml create mode 100644 tz/exam/exam-service/Dockerfile create mode 100644 tz/gateway/Dockerfile create mode 100644 tz/system/system-service/Dockerfile create mode 100644 tz/system/system-service/src/main/java/com/tz/platform/system/api/SystemController.java create mode 100644 tz/system/system-service/src/main/java/com/tz/platform/system/api/biz/SystemBiz.java create mode 100644 tz/upload/upload-service/Dockerfile create mode 100644 tz/user/user-service/Dockerfile diff --git a/front/src/components/footer.vue b/front/src/components/footer.vue index ac6e51a..d5a5bc5 100644 --- a/front/src/components/footer.vue +++ b/front/src/components/footer.vue @@ -4,7 +4,7 @@ 天择金融模拟交易平台版权所有 备案号:87654321 </div> <div class="tz-ma"> - <b-img class="d-block" src="/static/image/ma.jpg" /> + <b-img class="d-block" src="/static/image/ma.png" /> </div> </div> </template> @@ -27,4 +27,8 @@ display: flex; justify-content: center; } +.tz-ma>img{ + width: 5rem; + height: 5rem; +} </style> \ No newline at end of file diff --git a/front/src/router/index.js b/front/src/router/index.js index ffe2efb..8e12134 100644 --- a/front/src/router/index.js +++ b/front/src/router/index.js @@ -50,7 +50,6 @@ export default router router.beforeEach((to,from,next) =>{ let userInfo = getInfo() if(!!userInfo){ - if((!userInfo.complete)&&to.path!='/member'){ alert("请完善个人信息!") next('/member') diff --git a/front/src/views/competition/ranking.vue b/front/src/views/competition/ranking.vue index 378c434..d61cdda 100644 --- a/front/src/views/competition/ranking.vue +++ b/front/src/views/competition/ranking.vue @@ -20,7 +20,7 @@ <div class="tz-sub-tab"> <div :class=" rankingId ==1? 'ranking-selected':''" @click="rankingId =1"> <b-img src="/static/image/icon_ranking_1.png"/> - 综全排行榜 + 综合排行榜 </div> <div :class=" rankingId ==2? 'ranking-selected':''" @click="rankingId =2"> <b-img src="/static/image/icon_ranking_2.png"/> @@ -40,7 +40,7 @@ </div> <div class="tz-table-container"> <div class="tz-table-filter"> - <span>日期</span><b-datepicker /><span>检索</span><b-input class="tz-filter-input" placeholder="用户名/所属院校" /> <b-button class="tz-table-button">查询</b-button><b-button class="tz-table-button">导出</b-button> + <span>检索</span><b-input class="tz-filter-input" placeholder="用户名/所属院校" /> <b-button class="tz-table-button">查询</b-button><b-button class="tz-table-button">导出</b-button> </div> <div class="table-header"> <div> diff --git a/front/src/views/competition/second.vue b/front/src/views/competition/second.vue index 8a67c65..4cf751f 100644 --- a/front/src/views/competition/second.vue +++ b/front/src/views/competition/second.vue @@ -86,7 +86,7 @@ </div> </div> </b-col> - <b-col sm> + <b-col v-if="competition.type == 1" sm> <div class="tz-panel"> <div> <div> @@ -115,7 +115,7 @@ </div> </div> </b-col> - <b-col sm> + <b-col v-if="competition.type == 1" sm> <div class="tz-panel"> <div> <div class="tz-bg-yellow"> @@ -203,6 +203,8 @@ import * as echarts from 'echarts' import * as competitionApi from '@/api/competition' import { getInfo } from '@/utils/auth' import * as memberApi from '@/api/member' +import * as rankingApi from '@/api/ranking' + export default { data(){ return { @@ -230,7 +232,7 @@ export default { this.compId = this.$route.query.id } this.userInfo = getInfo() - + }, watch:{ competition:function(nv){ @@ -243,10 +245,7 @@ export default { this.stageId = this.competition.stageList[0].id this.loadData() } - this.draw("personalRatio") - this.draw("teamRatio") - this.drawRanking("personalRanking") - this.drawRanking("teamRanking") + }, methods:{ listPosition(){ @@ -256,6 +255,14 @@ export default { this.positionList = res.data } }) + rankingApi.listAll(this.compId,this.stageId ).then(res=>{ + if(res.code == 200){ + this.draw("personalRatio",res.data.list) + this.draw("teamRatio",res.data.list) + this.drawRanking("personalRanking",res.data.list) + this.drawRanking("teamRanking",res.data.list) + } + }) }, getMemberInfo(){ memberApi.getMemberInfo(this.compId,this.stageId).then(res=>{ @@ -273,6 +280,7 @@ export default { this.getCurrentStage(id) this.loadData() }, + numberFixed(num){ if(typeof num == 'number'){ return num.toFixed(3) @@ -288,18 +296,24 @@ export default { this.currentStage = stage } }, - draw(id){ - let base = +new Date(1968, 9, 3); - let oneDay = 24 * 3600 * 1000; + draw(id,rankList){ + let title = '' + if(id == 'personalRatio'){ + title = "个人收益率"; + }else{ + title = '团队收益率'; + } let date = []; let data = [Math.random() * 300]; let data2 = [Math.random() * 300] - for (let i = 1; i < 20000; i++) { - var now = new Date((base += oneDay)); + for (let i = 0; i < rankList.length; i++) { + let tmp = rankList[i] + var now = new Date(tmp.updateTime); date.push([now.getFullYear(), now.getMonth() + 1, now.getDate()].join('/')); - data.push(Math.round((Math.random() - 0.5) * 20 + data[i - 1])); - data2.push(Math.round((Math.random() - 0.5) * 20 + data2[i - 1])); + data.push(tmp.pnlRatio); + data2.push(tmp.baseRatio); } + console.log(date,data,data2) let option = { tooltip: { trigger: 'axis', @@ -332,7 +346,7 @@ export default { ], series: [ { - name: '个人收益率', + name: title, type: 'line', symbol: 'none', sampling: 'lttb', @@ -388,21 +402,32 @@ export default { } this.teamCharts.setOption(option) } - - }, - drawRanking(id){ + drawRanking(id,rankList){ + let xData = [] + let yData = [] + for(var i = 0;i<rankList.length;i++){ + let tmp = rankList[i] + xData.push(tmp.updateTime) + if(id == 'personalRanking'){ + yData.push(tmp.personalRank) + }else{ + yData.push(tmp.teamRank) + } + + } + let option = { xAxis: { type: 'category', - data: ['2015', '2016', '2017', '2018', '2019', '2020', '2021'] + data: xData }, yAxis: { type: 'value' }, series: [ { - data: [150, 230, 224, 218, 135, 147, 260], + data: yData, type: 'line', color: '#faa7c1' } diff --git a/front/src/views/login/index.vue b/front/src/views/login/index.vue index 256e251..b1b839c 100644 --- a/front/src/views/login/index.vue +++ b/front/src/views/login/index.vue @@ -18,8 +18,8 @@ export default { data(){ return { user: { - username:'2020096911', - password:'abc123ddd' + username:'', + password:'' }, msg: '' } @@ -54,12 +54,14 @@ export default { background-image: url('/static/image/login_bg.jpg'); background-size: cover; min-height: 1080px; - + } .tz-login-container{ - display: flex; - justify-content: flex-end; - align-items: center; + display: flex; + justify-content: flex-end; + align-items: center; + height: 100%; + width: 100%; } .tz-login-box{ box-shadow: 0 0 0 5px #7dbffb; diff --git a/front/src/views/member/index.vue b/front/src/views/member/index.vue index ea391e4..249b8a5 100644 --- a/front/src/views/member/index.vue +++ b/front/src/views/member/index.vue @@ -154,7 +154,7 @@ export default { saveInfo(){ memberApi.saveInfo(this.userInfo).then(res => { if(res.data){ - this.userInfo.compele = true + this.userInfo.complete = true setInfo(this.userInfo) alert("操作成功") }else{ diff --git a/front/src/views/system/exam.vue b/front/src/views/system/exam.vue index 951369b..292ea02 100644 --- a/front/src/views/system/exam.vue +++ b/front/src/views/system/exam.vue @@ -247,7 +247,8 @@ export default { console.log(res) if(res.code == 200){ alert("考试得分"+res.data.score) - + }else{ + alert(res.msg) } }) }, diff --git a/front/src/views/system/index.vue b/front/src/views/system/index.vue index 109f51f..50cdb19 100644 --- a/front/src/views/system/index.vue +++ b/front/src/views/system/index.vue @@ -450,13 +450,7 @@ export default { }) } }, - mounted(){ - this.$nextTick(function(){ - this.drawRanking() - }) - }, updated(){ - console.log(this.tabId) if(this.tabId == 0 ){ this.$nextTick(()=>{ this.drawRanking() diff --git a/tz/common/common-core/src/main/resources/logback-tz.xml b/tz/common/common-core/src/main/resources/logback-tz.xml index b3e806c..298fee5 100644 --- a/tz/common/common-core/src/main/resources/logback-tz.xml +++ b/tz/common/common-core/src/main/resources/logback-tz.xml @@ -23,7 +23,7 @@ </springProfile> <!-- 生产环境 --> - <springProfile name="prod"> + <springProfile name="pro"> <appender name="PROD_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${FILE_PATH}/warn</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> diff --git a/tz/common/common-core/src/main/resources/system.properties b/tz/common/common-core/src/main/resources/system.properties index 0739e26..9b25591 100644 --- a/tz/common/common-core/src/main/resources/system.properties +++ b/tz/common/common-core/src/main/resources/system.properties @@ -1,3 +1,3 @@ -pic_path=/Volumes/Lexar/www/pic/ +pic_path=/users/root/www/pic/ pic_recourse_url=/pic/ initPwd=tz2022 \ No newline at end of file diff --git a/tz/common/common-service/pom.xml b/tz/common/common-service/pom.xml index 954a27e..7d9165f 100644 --- a/tz/common/common-service/pom.xml +++ b/tz/common/common-service/pom.xml @@ -23,10 +23,10 @@ </dependency> <!-- sentinel --> - <dependency> - <groupId>com.alibaba.cloud</groupId> - <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> - </dependency> +<!-- <dependency>--> +<!-- <groupId>com.alibaba.cloud</groupId>--> +<!-- <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>--> +<!-- </dependency>--> <dependency> diff --git a/tz/competition/competition-service/Dockerfile b/tz/competition/competition-service/Dockerfile new file mode 100644 index 0000000..e9c9d2a --- /dev/null +++ b/tz/competition/competition-service/Dockerfile @@ -0,0 +1,8 @@ +FROM daocloud.io/library/java:8-jre-alpine +MAINTAINER tianze +ARG JAVA_OPTS="-Xmx128M" +ENV JAVA_OPTS=$JAVA_OPTS +ARG RUN_ARGS="--spring.profiles.active=dev" +ENV RUN_ARGS=$RUN_ARGS +ADD target/tianze-competition.jar /competition-service.jar +ENTRYPOINT ["sh","-c","java $JAVA_OPTS -jar /competition-service.jar $RUN_ARGS"] diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/ApiCompetitionRankingController.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/ApiCompetitionRankingController.java index ccfc8ee..75b1233 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/ApiCompetitionRankingController.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/ApiCompetitionRankingController.java @@ -1,10 +1,29 @@ package com.tz.platform.competitiion.api; +import com.tz.platform.common.core.base.BaseController; +import com.tz.platform.common.core.base.Result; +import com.tz.platform.competitiion.api.biz.ApiRankingBiz; +import com.tz.platform.competitiion.api.dto.ListRankingDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping(value = "/api/competition/ranking") -public class ApiCompetitionRankingController { +public class ApiCompetitionRankingController extends BaseController { + @Autowired + private ApiRankingBiz rankingBiz; + + @GetMapping(value = "list") + public Result<ListRankingDTO> listRank(@RequestParam("compId") Long cmpId, @RequestParam("stageId") Integer stageId,@RequestParam("orderBy") String sort,@RequestParam("direct") Integer direct,String date){ + return rankingBiz.list(cmpId,stageId,sort,direct,date); + } + + @GetMapping(value = "listAll") + public Result<ListRankingDTO> listAll(@RequestParam("compId") Long cmpId, @RequestParam("stageId") Integer stageId){ + return rankingBiz.listAll(cmpId,stageId,getUserNo()); + } } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/ApiRankingBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/ApiRankingBiz.java new file mode 100644 index 0000000..bc7ad73 --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/ApiRankingBiz.java @@ -0,0 +1,99 @@ +package com.tz.platform.competitiion.api.biz; + +import com.tz.platform.common.core.base.Result; +import com.tz.platform.common.core.tools.BeanUtils; +import com.tz.platform.competitiion.api.dto.ListRankingDTO; +import com.tz.platform.competitiion.api.dto.RankingDTO; +import com.tz.platform.entity.Competition; +import com.tz.platform.entity.Ranking; +import com.tz.platform.repository.CompetitionDao; +import com.tz.platform.repository.RankingDao; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.util.Collections; +import java.util.List; +import java.util.concurrent.TimeUnit; + +@Component +public class ApiRankingBiz +{ + + @Autowired + private RedisTemplate<String,Object> template; + + @Autowired + private CompetitionDao competitionDao; + + @Autowired + private RankingDao rankingDao; + + public Result<ListRankingDTO> list(Long compId,Integer stageId,String sort,Integer direct,String date){ + + Competition competition = competitionDao.getById(compId); + + String key = "rankList_"+compId+"_"+stageId+"_"+date; + Object rankList = template.opsForValue().get(key); + + List<Ranking> rankingList = null; + if(rankList == null){ + if(StringUtils.isEmpty(date)){ + rankingList = rankingDao.findAllByCompIdAndStageIdAndUpdateTime(compId,stageId,competition.getUpdateRankDate()); + }else{ + rankingList = rankingDao.findAllByCompIdAndStageIdAndUpdateTime(compId,stageId,date); + } + if(rankingList!=null){ + template.opsForValue().set(key,rankingList,30, TimeUnit.MINUTES); + } + }else{ + rankingList = (List<Ranking>) rankList; + } + + Collections.sort(rankingList, (o1, o2) -> { + if(StringUtils.isEmpty(sort)){ + Integer r1 = o1.getPersonalRank(); + Integer r2 = o2.getPersonalRank(); + if(r1 == null){ + r1 = 0; + } + if(r2 == null){ + r2 = 0; + } + if(direct == 0){ + return r1 - r2; + }else{ + return r2 - r1; + } + } + return 0; + }); + + ListRankingDTO dto = new ListRankingDTO(); + List<RankingDTO> rankingDTOList = BeanUtils.copyProperties(rankingList,RankingDTO.class); + dto.setTotal(rankingDTOList.size()); + dto.setList(rankingDTOList); + return Result.success(dto); + } + + public Result<ListRankingDTO> listAll(Long compId,Integer stageId,Long userNo){ + String key = "rankList_"+compId+"_"+stageId+"_"+userNo; + Object rankList = template.opsForValue().get(key); + List<Ranking> rankingList = null; + if(rankList == null){ + rankingList = rankingDao.findAllByCompIdAndStageIdAndUserNo(compId,stageId,userNo); + + if(rankingList!=null&&rankingList.size()>0){ + template.opsForValue().set(key,rankingList,30, TimeUnit.MINUTES); + } + }else{ + rankingList = (List<Ranking>) rankList; + } + ListRankingDTO dto = new ListRankingDTO(); + List<RankingDTO> rankingDTOList = BeanUtils.copyProperties(rankingList,RankingDTO.class); + dto.setTotal(rankingDTOList.size()); + dto.setList(rankingDTOList); + return Result.success(dto); + } +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/RankingDTO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/RankingDTO.java index 361bd13..d3fe5a2 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/RankingDTO.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/RankingDTO.java @@ -2,7 +2,133 @@ package com.tz.platform.competitiion.api.dto; import lombok.Data; +import java.io.Serializable; + @Data -public class RankingDTO { +public class RankingDTO implements Serializable { + private String id; + + + private String accountId; + /** + * 总资产 + */ + private Double nav; + + /** + * 可用资产 + */ + private Double available; + + /** + * 市值 + */ + private Double marketValue; + + /** + * 累计盈亏 + */ + private Double profitLoss; + + /** + * 累计手续费 + */ + private Double cumCommission; + + /** + * 浮动盈亏 + */ + private Double fpnl; + + /** + * 累计收益率 + */ + private Double pnlRatio; + + /** + * 基准收益率 + */ + private Double baseRatio; + + /** + * 团队收益率 + */ + private Double teamRatio; + + /** + * 个人排名 + */ + private Integer personalRank; + + + /** + * 团队排名 + */ + private Integer teamRank; + + /** + * 最大回测 + */ + private Double maxDrawdown; + + /** + * 卡玛比率 + */ + private Double calmarRatio; + + /** + * 夏普比率 + */ + private Double sharpRatio; + + /** + * 开仓次数 + */ + private Integer openCount; + + /** + * 平仓次数 + */ + private Integer closeCount; + + /** + * 年化收益率 + */ + private Double pnlRatioAnnual; + + /** + *胜率 + */ + private Double winRatio; + + private Long userNo; + private Long compId; + private Integer stageId; + private Integer teamId; + + private String name; + private String teamName; + private String school; + private Integer levelId; + private Integer regionId; + + /** + * 综合得分 + */ + private Double combineScore; + + /** + * 团队综合得分 + */ + private Double teamCombineScore; + + /** + * 交易得分 + */ + private Double financeScore; + /** + * 更新时间 + */ + private String updateTime; } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/CompetitionJob.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/CompetitionJob.java index eea6c5b..7faeb39 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/CompetitionJob.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/CompetitionJob.java @@ -57,8 +57,8 @@ public class CompetitionJob { /** * 每天零晨2点执行 */ - @Scheduled(cron = "0 0 2 1 * ?") -// @Scheduled(cron = "10 * * * * ?") +// @Scheduled(cron = "0 0 2 1 * ?") + @Scheduled(cron = "5 * * * * ?") public void fetchRanking(){ String jobName = "rankingJob"; boolean lock = lock(jobName,ms); diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/biz/CompetitionJobBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/biz/CompetitionJobBiz.java index 4f7f957..d786a6f 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/biz/CompetitionJobBiz.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/biz/CompetitionJobBiz.java @@ -103,6 +103,10 @@ public class CompetitionJobBiz { competition.setCurrentStageName(current.getName()); competition.setStatus(1); competitionDao.updateStatus(competition.getId(),1,current.getName(),current.getId()); + }else{ + if(competition.getEndTime().getTime()<now){ + competitionDao.updateStatus(competition.getId(),2,"无赛段",0); + } } } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/biz/RankingBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/biz/RankingBiz.java index 766940e..92675cc 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/biz/RankingBiz.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/biz/RankingBiz.java @@ -1,5 +1,6 @@ package com.tz.platform.competitiion.job.biz; +import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.tz.platform.common.core.tools.DateUtil; @@ -42,6 +43,8 @@ public class RankingBiz { List<Competition> competitionList = competitionDao.findAllByStatus(1); String endTime = DateUtil.format(new Date()); String now = DateUtil.format(new Date()); + Map<String,Integer> reportMap = listReport(jueJinApi); + competitionList.forEach(competition -> { try { CompetitionTask currentTask = taskDao.getByCompetitionIdAndStageId(competition.getId(), competition.getCurrentStage()); @@ -51,49 +54,44 @@ public class RankingBiz { List<Ranking> rankingList = new ArrayList<>(); memberList.forEach(member -> { if (StringUtils.hasText(member.getAccountId())) { - String jsonStr = jueJinApi.createReport(member.getAccountId(), endTime); - if(StringUtils.isEmpty(jsonStr)){ - return; - } - JSONObject jsonObject = JSONUtil.parseObj(jsonStr); - if(jsonObject.containsKey("report_id")){ - Integer reportId =jsonObject.getInt("report_id"); + if(reportMap.containsKey(member.getAccountId())){ + Integer reportId =reportMap.get(member.getAccountId()); // memberDao.updateReportId(member.getUserId(),currentTask.getStageId(),currentTask.getCompetitionId(),reportId); member.setReportId(reportId); String contentStr = jueJinApi.getReport(reportId.toString()); - JSONObject rankingObj = JSONUtil.parseObj(contentStr); if(rankingObj.containsKey("data")){ JSONObject dataObj = (JSONObject)rankingObj.getJSONArray("data").get(0); JSONObject cashObj =dataObj.getJSONObject("cash"); + if(cashObj.size() == 0 ) {return;} //可用资金 - Double available = cashObj.getDouble("available"); + Double available = getOV(cashObj,"available",member.getAvailableFounds()); // cashObj.getDouble("available"); //累计手续费 - Double cumCommission = cashObj.getDouble("cum_commission"); + Double cumCommission = getOV(cashObj,"cum_commission",member.getCommission()); //cashObj.getDouble("cum_commission"); //浮动盈亏 - Double fpnl = cashObj.getDouble("fpnl"); + Double fpnl = getOV(cashObj,"fpnl",0D);//cashObj.getDouble("fpnl"); //收益 - Double pnl = cashObj.getDouble("pnl"); + Double pnl =getOV(cashObj,"pnl",0D); // cashObj.getDouble("pnl"); //总资产 - Double nav = cashObj.getDouble("nav"); + Double nav =getOV(cashObj,"nav",member.getTotalFounds()) ;// cashObj.getDouble("nav"); JSONObject indicatorObj = dataObj.getJSONObject("indicator"); //累计收益率 - Double pnlRatio = indicatorObj.getDouble("pnl_ratio"); + Double pnlRatio = getOV(indicatorObj,"pnl_ratio",0D); //indicatorObj.getDouble("pnl_ratio"); //年化收益率 - Double pnlRatioAnnual = indicatorObj.getDouble("pnl_ratio_annual"); + Double pnlRatioAnnual = getOV(indicatorObj,"pnl_ratio_annual",0D); //indicatorObj.getDouble("pnl_ratio_annual"); //夏普比例 - Double sharpRatio = indicatorObj.getDouble("sharp_ratio"); + Double sharpRatio =getOV(indicatorObj,"sharp_ratio",0D); //indicatorObj.getDouble("sharp_ratio"); //卡玛比例 - Double calmarRatio = indicatorObj.getDouble("calmar_ratio"); + Double calmarRatio =getOV(indicatorObj,"calmar_ratio",0D); //indicatorObj.getDouble("calmar_ratio"); //最大回测 - Double maxDrawdown = indicatorObj.getDouble("max_drawdown"); + Double maxDrawdown = getOV(indicatorObj,"max_drawdown",0D); //indicatorObj.getDouble("max_drawdown"); //开仓次数 - Integer openCount = indicatorObj.getInt("open_count"); + Integer openCount = getOV(indicatorObj,"open_count",member.getOpenCount()); //indicatorObj.getInt("open_count"); //平仓次数 - Integer closeCount = indicatorObj.getInt("close_count"); + Integer closeCount = getOV(indicatorObj,"close_count",member.getCloseCount()); //indicatorObj.getInt("close_count"); //胜率 - Double winRatio = indicatorObj.getDouble("win_ratio"); + Double winRatio = getOV(indicatorObj,"win_ratio",0D); //indicatorObj.getDouble("win_ratio"); if(member.getHighestRatio() == null){ member.setHighestRatio(pnlRatio); } @@ -103,7 +101,7 @@ public class RankingBiz { member.setHighestRatio(maxRatio); } Ranking ranking = new Ranking(); - ranking.setUserNo(member.getId().longValue()); + ranking.setUserNo(member.getUserId()); ranking.setCompId(competition.getId()); ranking.setName(member.getName()); ranking.setSchool(member.getSchool()); @@ -168,13 +166,44 @@ public class RankingBiz { }); } + + public Map<String,Integer> listReport(JueJinApi jueJinApi){ + + Map<String,Integer> reportMap = new HashMap<>(); + for(int i = 1;i<10000; i++){ + String content = jueJinApi.listReport(i,100); + JSONObject resObj = JSONUtil.parseObj(content); + if(resObj.containsKey("data")){ + JSONArray jsonArray = resObj.getJSONArray("data"); + jsonArray.forEach(jObj ->{ + JSONObject reportObj = (JSONObject) jObj; + String key = reportObj.getStr("account_id"); + Integer value = reportObj.getJSONObject("report").getInt("report_id"); + reportMap.put(key,value); + }); + }else{ + break; + } + } + return reportMap; + } + + private <T> T getOV(JSONObject jsonObject,String key,T dv){ + if(jsonObject.containsKey(key)){ + Object v = jsonObject.get(key); + T rs = (T)v; + return rs; + } + return dv; + } + /** * 排名 * @param rankingList * @param task */ private void computeRanking(List<Ranking> rankingList ,CompetitionTask task){ - Map<Integer,List<Ranking>> map = rankingList.stream().collect(Collectors.groupingBy(Ranking::getTeamId)); + Map<Integer,List<Ranking>> map = rankingList.stream().collect(Collectors.groupingBy(Ranking::getTeamId)); map.forEach((k,v)->{ Double teamRatio = v.stream().mapToDouble((r)-> { Double t = r.getProfitLoss(); @@ -195,16 +224,22 @@ public class RankingBiz { v.forEach(ranking -> { ranking.setTeamRatio(teamRatio); ranking.setTeamCombineScore(teamCombineScore); + }); }); rankingList.sort(Comparator.comparing(Ranking::getFinanceScore)); for(int i = 0;i<rankingList.size();i++){ - rankingList.get(i).setPersonalRank(i+1); + int rank = i + 1; + Ranking ranking = rankingList.get(i); + ranking.setPersonalRank(rank); + memberDao.updatePersonalRank(ranking.getUserNo(),ranking.getStageId(),ranking.getCompId(),rank); } rankingList.sort(Comparator.comparing(Ranking::getTeamCombineScore)); for(int i =0;i<rankingList.size();i++){ - rankingList.get(i).setTeamRank(i+1); - + int rank = i + 1; + Ranking ranking = rankingList.get(i); + ranking.setTeamRank(rank); + memberDao.updateTeamRank(ranking.getUserNo(),ranking.getStageId(),ranking.getCompId(),rank); } rankingDao.saveAll(rankingList); } @@ -233,5 +268,4 @@ public class RankingBiz { double score = task.getFinanceBasePower() +(userRatio - baseRatio) /(maxUserRatio -baseRatio)* task.getFinanceProfitPower(); return score; } - } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/CompetitionController.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/CompetitionController.java index 7e2dd96..be2b565 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/CompetitionController.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/CompetitionController.java @@ -44,4 +44,9 @@ public class CompetitionController { return biz.get(vo); } + @PostMapping(value = "send") + public Result<String> changeStatus(@RequestBody CompetitionVO vo){ + return biz.send(vo); + } + } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/PCCompetitionBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/PCCompetitionBiz.java index 8a8af45..291da96 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/PCCompetitionBiz.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/PCCompetitionBiz.java @@ -97,10 +97,28 @@ public class PCCompetitionBiz { return Result.success(dto); } - public Result<CompetitionDTO> get(@RequestBody CompetitionVO vo){ + public Result<CompetitionDTO> get(CompetitionVO vo){ Competition competition = competitionDao.getById(vo.getId()); CompetitionDTO dto = new CompetitionDTO(); BeanUtils.copyProperties(competition,dto); return Result.success(dto); } + + + public Result<String> send(CompetitionVO vo){ + Competition competition = competitionDao.getById(vo.getId()); + if(competition == null){ + return Result.error("大赛不存在"); + } + if(competition.getStatus() == -1){ + int rs = competitionDao.updateStatus(vo.getId(),0); + if(rs>0){ + return Result.success("发布成功"); + } + }else{ + return Result.error("大赛已发布"); + } + + return Result.error("操作失败"); + } } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Competition.java b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Competition.java index 2dea061..05653d0 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Competition.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Competition.java @@ -31,13 +31,9 @@ public class Competition { private Integer teamCount; private String updateRankDate; private boolean enableSignup; - @Column(columnDefinition = "TIMESTAMP") private Date startTime; - @Column(columnDefinition = "TIMESTAMP") private Date endTime; - @Column(columnDefinition = "TIMESTAMP") private Date signupStartTime; - @Column(columnDefinition = "TIMESTAMP") private Date signupEndTime; @Type(type = "json") @@ -45,7 +41,6 @@ public class Competition { private List<Stage> stageList; private Integer currentStage; private String currentStageName; - @Column(columnDefinition = "TIMESTAMP") private Date createTime; @Type(type = "json") @Column(columnDefinition = "json") diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/JueJinApi.java b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/JueJinApi.java index d9ae0b4..cd55fe6 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/JueJinApi.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/JueJinApi.java @@ -98,6 +98,12 @@ public class JueJinApi { return content; } + public String listReport(Integer pageNo,Integer pageSize){ + String url = baseUrl +"/api/v1/reports?page="+pageNo+"&size="+pageSize; + String content = HttpUtil.get(url,headers); + return content; + } + /** * 基准收益率 * @return @@ -190,7 +196,6 @@ public class JueJinApi { public static void main(String[] args) { JueJinApi api = new JueJinApi(); String accountId = "2e41a913-9dc1-11ec-89b3-00163e0e6ad0"; - String zhangSan1Qihuo = "0cfc7894-9f4e-11ec-bf20-00163e0e6ad0"; String zhangSan1GuPiao = ""; String start = "2022-03-07"; @@ -201,9 +206,9 @@ public class JueJinApi { // api.deleteAccount("4811913f-9dba-11ec-89b3-00163e0e6ad0"); // api.getCashInfo("2e41a913-9dc1-11ec-89b3-00163e0e6ad0"); // api.test(); -// api.createReport(accountId,"report"+ System.currentTimeMillis()); + api.createReport(accountId,"report"+ System.currentTimeMillis()); // api.getCashInfo(accountId); - api.getReport("2794345"); + api.getReport("14892159"); // api.getStockInfo("SHSE.600547,SHSE.603160"); // api.getProfit("2022-03-11","2022-03-15"); // api.getHeavy(accountId,start,end); diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionMemberDao.java b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionMemberDao.java index 8dc7841..7797d60 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionMemberDao.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionMemberDao.java @@ -53,4 +53,13 @@ public interface CompetitionMemberDao extends JpaRepository<CompetitionMember,In @Query(value = "update competition_member set highest_ratio=:ratio where user_id=:userNo and stage_id=:stageId and competition_id=:compId",nativeQuery = true) int updateHighestRatio(@Param("userNo") Long userNo,@Param("stageId") Integer stageId,@Param("compId") Long comId, @Param("ratio") Double ratio); + + @Modifying + @Query(value = "update competition_member set personal_rank=:rank where user_id=:userNo and stage_id=:stageId and competition_id=:compId",nativeQuery = true) + int updatePersonalRank(@Param("userNo") Long userNo,@Param("stageId") Integer stageId,@Param("compId") Long comId, @Param("rank") Integer rank); + + @Modifying + @Query(value = "update competition_member set team_rank=:rank where user_id=:userNo and stage_id=:stageId and competition_id=:compId",nativeQuery = true) + int updateTeamRank(@Param("userNo") Long userNo,@Param("stageId") Integer stageId,@Param("compId") Long comId, @Param("rank") Integer rank); + } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/RankingDao.java b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/RankingDao.java index fcb2fd4..a1c39d8 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/RankingDao.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/RankingDao.java @@ -9,4 +9,5 @@ import java.util.List; @Repository public interface RankingDao extends JpaRepository<Ranking,String> { List<Ranking> findAllByCompIdAndStageIdAndUpdateTime(Long compId,Integer stageId,String updateTime); + List<Ranking> findAllByCompIdAndStageIdAndUserNo(Long compId,Integer stageId,Long userNo); } diff --git a/tz/competition/competition-service/src/main/resources/bootstrap.yml b/tz/competition/competition-service/src/main/resources/bootstrap.yml index 4d94314..7ad082f 100644 --- a/tz/competition/competition-service/src/main/resources/bootstrap.yml +++ b/tz/competition/competition-service/src/main/resources/bootstrap.yml @@ -10,7 +10,7 @@ spring: active: dev cloud: nacos: - server-addr: 127.0.0.1:8848 + server-addr: 172.19.255.105:8848 username: nacos password: nacos config: diff --git a/tz/competition/pom.xml b/tz/competition/pom.xml index 2afaa3b..825eefc 100644 --- a/tz/competition/pom.xml +++ b/tz/competition/pom.xml @@ -14,7 +14,15 @@ <modules> <module>competition-service</module> </modules> - + <build> + <finalName>tianze-competition</finalName> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + </plugin> + </plugins> + </build> diff --git a/tz/docker-compose.yml b/tz/docker-compose.yml new file mode 100644 index 0000000..2f816c5 --- /dev/null +++ b/tz/docker-compose.yml @@ -0,0 +1,96 @@ +version: "3.0" +services: + tianze-upload: + build: + context: ./upload/upload-service + args: + JAVA_OPTS: '-Xmn256M -Xmx1024M' + RUN_ARGS: '--spring.profiles.active=pro --spring.cloud.nacos.server-addr=172.19.255.105:8848' + image: alient/tianze:upload + container_name: upload + restart: always + volumes: + - /tmp/logs/upload:/root/tianze/logs/upload + - /root/tianze/www/pic/:/users/root/www/pic/ + networks: + - tianze + ports: + - "50015:50015" + tianze-user: + build: + context: ./user/user-service + args: + JAVA_OPTS: '-Xmn256M -Xmx1024M' + RUN_ARGS: '--spring.profiles.active=pro --spring.cloud.nacos.server-addr=172.19.255.105:8848' + image: alient/tianze:user + container_name: user + restart: always + volumes: + - /tmp/logs/user:/root/tianze/logs/user + networks: + - tianze + ports: + - "50011:50011" + tianze-system: + build: + context: ./system/system-service + args: + JAVA_OPTS: '-Xmn256M -Xmx1024M' + RUN_ARGS: '--spring.profiles.active=pro --spring.cloud.nacos.server-addr=172.19.255.105:8848' + image: alient/tianze:system + container_name: system + restart: always + volumes: + - /tmp/logs/system:/root/tianze/logs/system + networks: + - tianze + ports: + - "50014:50014" + tianze-gateway: + build: + context: ./gateway + args: + JAVA_OPTS: '-Xmn256M -Xmx1024M' + RUN_ARGS: '--spring.profiles.active=pro --spring.cloud.nacos.server-addr=172.19.255.105:8848' + image: alient/tianze:gateway + container_name: gateway + restart: always + volumes: + - /tmp/logs/gateway:/root/tianze/logs/gateway + networks: + - tianze + ports: + - "50010:50010" + tianze-exam: + build: + context: ./exam/exam-service + args: + JAVA_OPTS: '-Xmn256M -Xmx1024M' + RUN_ARGS: '--spring.profiles.active=pro --spring.cloud.nacos.server-addr=172.19.255.105:8848' + image: alient/tianze:exam + container_name: exam + restart: always + volumes: + - /tmp/logs/exam:/root/tianze/logs/exam + networks: + - tianze + ports: + - "50013:50013" + tianze-competition: + build: + context: ./competition/competition-service + args: + JAVA_OPTS: '-Xmn256M -Xmx1024M' + RUN_ARGS: '--spring.profiles.active=pro --spring.cloud.nacos.server-addr=172.19.255.105:8848' + image: alient/tianze:competition + container_name: competition + restart: always + volumes: + - /tmp/logs/competition:/root/tianze/logs/competition + networks: + - tianze + ports: + - "50012:50012" +networks: + tianze: + driver: bridge \ No newline at end of file diff --git a/tz/exam/exam-service/Dockerfile b/tz/exam/exam-service/Dockerfile new file mode 100644 index 0000000..d7a18fc --- /dev/null +++ b/tz/exam/exam-service/Dockerfile @@ -0,0 +1,8 @@ +FROM daocloud.io/library/java:8-jre-alpine +MAINTAINER tianze +ARG JAVA_OPTS="-Xmx128M" +ENV JAVA_OPTS=$JAVA_OPTS +ARG RUN_ARGS="--spring.profiles.active=dev" +ENV RUN_ARGS=$RUN_ARGS +ADD target/tianze-exam.jar /exam-service.jar +ENTRYPOINT ["sh","-c","java $JAVA_OPTS -jar /exam-service.jar $RUN_ARGS"] diff --git a/tz/exam/exam-service/pom.xml b/tz/exam/exam-service/pom.xml index 60291c0..8e8a8ec 100644 --- a/tz/exam/exam-service/pom.xml +++ b/tz/exam/exam-service/pom.xml @@ -45,4 +45,14 @@ </dependency> </dependencies> + <build> + <finalName>tianze-exam</finalName> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + </plugin> + </plugins> + </build> + </project> \ No newline at end of file diff --git a/tz/exam/exam-service/src/main/resources/bootstrap.yml b/tz/exam/exam-service/src/main/resources/bootstrap.yml index cb2de6d..ce61352 100644 --- a/tz/exam/exam-service/src/main/resources/bootstrap.yml +++ b/tz/exam/exam-service/src/main/resources/bootstrap.yml @@ -23,11 +23,6 @@ spring: redis: repositories: enabled: false - devtools: - restart: - enabled: true - livereload: - port: 35736 main: allow-bean-definition-overriding: true logging: diff --git a/tz/gateway/Dockerfile b/tz/gateway/Dockerfile new file mode 100644 index 0000000..da1695c --- /dev/null +++ b/tz/gateway/Dockerfile @@ -0,0 +1,8 @@ +FROM daocloud.io/library/java:8-jre-alpine +MAINTAINER tianze +ARG JAVA_OPTS="-Xmn256M -Xmx1024M" +ENV JAVA_OPTS=$JAVA_OPTS +ARG RUN_ARGS="--spring.profiles.active=pro --spring.cloud.nacos.server-addr=172.19.255.105:8848" +ENV RUN_ARGS=$RUN_ARGS +ADD target/tianze-gateway.jar /gateway-service.jar +ENTRYPOINT ["sh","-c","java $JAVA_OPTS -jar /gateway-service.jar $RUN_ARGS"] diff --git a/tz/gateway/pom.xml b/tz/gateway/pom.xml index 1ef409a..2cb7590 100644 --- a/tz/gateway/pom.xml +++ b/tz/gateway/pom.xml @@ -29,10 +29,10 @@ </dependency> <!-- sentinel --> - <dependency> - <groupId>com.alibaba.cloud</groupId> - <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> - </dependency> +<!-- <dependency>--> +<!-- <groupId>com.alibaba.cloud</groupId>--> +<!-- <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>--> +<!-- </dependency>--> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-spring-cloud-gateway-adapter</artifactId> @@ -64,18 +64,12 @@ </dependencies> <build> - <finalName>app-gateway</finalName> + <finalName>tianze-gateway</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> - <plugin> - <groupId>org.sonarsource.scanner.maven</groupId> - <artifactId>sonar-maven-plugin</artifactId> - </plugin> </plugins> </build> - - </project> \ No newline at end of file diff --git a/tz/pom.xml b/tz/pom.xml index eb8ad81..29efdf4 100644 --- a/tz/pom.xml +++ b/tz/pom.xml @@ -124,15 +124,11 @@ <!-- </plugin>--> <!-- https://github.com/spotify/dockerfile-maven --> -<!-- <plugin>--> -<!-- <groupId>com.spotify</groupId>--> -<!-- <artifactId>dockerfile-maven-plugin</artifactId>--> -<!-- <version>1.4.13</version>--> -<!-- <configuration>--> -<!-- <repository>harbor.roncoo.com/library/${project.artifactId}</repository>--> -<!-- <tag>${project.version}</tag>--> -<!-- </configuration>--> -<!-- </plugin>--> + <plugin> + <groupId>com.spotify</groupId> + <artifactId>dockerfile-maven-plugin</artifactId> + <version>1.4.13</version> + </plugin> </plugins> </pluginManagement> </build> diff --git a/tz/system/system-service/Dockerfile b/tz/system/system-service/Dockerfile new file mode 100644 index 0000000..4abb76d --- /dev/null +++ b/tz/system/system-service/Dockerfile @@ -0,0 +1,8 @@ +FROM daocloud.io/library/java:8-jre-alpine +MAINTAINER tianze +ARG JAVA_OPTS="-Xmx128M" +ENV JAVA_OPTS=$JAVA_OPTS +ARG RUN_ARGS="--spring.profiles.active=dev" +ENV RUN_ARGS=$RUN_ARGS +ADD target/tianze-system.jar /system-service.jar +ENTRYPOINT ["sh","-c","java $JAVA_OPTS -jar /system-service.jar $RUN_ARGS"] diff --git a/tz/system/system-service/pom.xml b/tz/system/system-service/pom.xml index 3a48cca..d3fad08 100644 --- a/tz/system/system-service/pom.xml +++ b/tz/system/system-service/pom.xml @@ -39,4 +39,13 @@ <scope>test</scope> </dependency> </dependencies> + <build> + <finalName>tianze-system</finalName> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + </plugin> + </plugins> + </build> </project> \ No newline at end of file diff --git a/tz/system/system-service/src/main/java/com/tz/platform/system/api/SystemController.java b/tz/system/system-service/src/main/java/com/tz/platform/system/api/SystemController.java new file mode 100644 index 0000000..d775eb6 --- /dev/null +++ b/tz/system/system-service/src/main/java/com/tz/platform/system/api/SystemController.java @@ -0,0 +1,17 @@ +package com.tz.platform.system.api; + +import com.tz.platform.common.core.base.Result; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/system") +public class SystemController { + + @GetMapping(value = "init") + public Result<String> init(){ + + return Result.success("success"); + } +} diff --git a/tz/system/system-service/src/main/java/com/tz/platform/system/api/biz/SystemBiz.java b/tz/system/system-service/src/main/java/com/tz/platform/system/api/biz/SystemBiz.java new file mode 100644 index 0000000..4f69952 --- /dev/null +++ b/tz/system/system-service/src/main/java/com/tz/platform/system/api/biz/SystemBiz.java @@ -0,0 +1,18 @@ +package com.tz.platform.system.api.biz; + +import com.tz.platform.common.core.base.Result; +import com.tz.platform.feign.user.IFeignUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class SystemBiz { + + @Autowired + private IFeignUser feignUser; + + public Result<String> initSystem(){ + + return Result.success("success"); + } +} diff --git a/tz/upload/upload-service/Dockerfile b/tz/upload/upload-service/Dockerfile new file mode 100644 index 0000000..beff982 --- /dev/null +++ b/tz/upload/upload-service/Dockerfile @@ -0,0 +1,8 @@ +FROM daocloud.io/library/java:8-jre-alpine +MAINTAINER tianze +ARG JAVA_OPTS="-Xmx128M" +ENV JAVA_OPTS=$JAVA_OPTS +ARG RUN_ARGS="--spring.profiles.active=dev" +ENV RUN_ARGS=$RUN_ARGS +ADD target/tianze-upload.jar /upload-service.jar +ENTRYPOINT ["sh","-c","java $JAVA_OPTS -jar /upload-service.jar $RUN_ARGS"] diff --git a/tz/upload/upload-service/pom.xml b/tz/upload/upload-service/pom.xml index 188a631..aa2c558 100644 --- a/tz/upload/upload-service/pom.xml +++ b/tz/upload/upload-service/pom.xml @@ -22,4 +22,15 @@ </dependency> </dependencies> + <build> + <finalName>tianze-upload</finalName> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + </plugin> + </plugins> + </build> + + </project> \ No newline at end of file diff --git a/tz/user/user-service/Dockerfile b/tz/user/user-service/Dockerfile new file mode 100644 index 0000000..bb38c53 --- /dev/null +++ b/tz/user/user-service/Dockerfile @@ -0,0 +1,8 @@ +FROM daocloud.io/library/java:8-jre-alpine +MAINTAINER tianze +ARG JAVA_OPTS="-Xmx128M" +ENV JAVA_OPTS=$JAVA_OPTS +ARG RUN_ARGS="--spring.profiles.active=pro --spring.cloud.nacos.server-addr=172.19.255.105:8848" +ENV RUN_ARGS=$RUN_ARGS +ADD target/tianze-user.jar /user-service.jar +ENTRYPOINT ["sh","-c","java $JAVA_OPTS -jar /user-service.jar $RUN_ARGS"] diff --git a/tz/user/user-service/pom.xml b/tz/user/user-service/pom.xml index 29cce23..c5cd744 100644 --- a/tz/user/user-service/pom.xml +++ b/tz/user/user-service/pom.xml @@ -38,4 +38,14 @@ </dependencies> + <build> + <finalName>tianze-user</finalName> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + </plugin> + </plugins> + </build> + </project> \ No newline at end of file diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/api/UserLoginController.java b/tz/user/user-service/src/main/java/com/tz/platform/user/api/UserLoginController.java index 5b326ae..c9ba288 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/api/UserLoginController.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/api/UserLoginController.java @@ -2,9 +2,12 @@ package com.tz.platform.user.api; import com.tz.platform.common.core.base.BaseController; import com.tz.platform.common.core.base.Result; +import com.tz.platform.feign.user.vo.UserVo; import com.tz.platform.user.api.biz.ApiUserLoginBiz; import com.tz.platform.user.api.bo.UserLoginPasswordBO; import com.tz.platform.user.api.dto.UserLoginDTO; +import com.tz.platform.user.pc.biz.PcUserInfoBiz; +import com.tz.platform.user.pc.vo.UserVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -15,6 +18,7 @@ public class UserLoginController extends BaseController { @Autowired private ApiUserLoginBiz apiUserLoginBiz; + @PostMapping(path = "password") public Result<UserLoginDTO> loginPassword(@RequestBody UserLoginPasswordBO userLoginPasswordBO){ return apiUserLoginBiz.loginPassword(userLoginPasswordBO); @@ -24,4 +28,9 @@ public class UserLoginController extends BaseController { public Result<String> loginOut(){ return apiUserLoginBiz.loginOut(getUserNo()); } + + @GetMapping(path = "default") + public Result<String> addDefaultUser(){ + return apiUserLoginBiz.addDefaultAdmin(); + } } diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/api/biz/ApiUserLoginBiz.java b/tz/user/user-service/src/main/java/com/tz/platform/user/api/biz/ApiUserLoginBiz.java index fe24f9f..348ebd5 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/api/biz/ApiUserLoginBiz.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/api/biz/ApiUserLoginBiz.java @@ -2,9 +2,12 @@ package com.tz.platform.user.api.biz; import cn.hutool.crypto.digest.DigestUtil; import com.tz.platform.common.core.base.Result; +import com.tz.platform.common.core.config.SystemUtil; import com.tz.platform.common.core.enmus.LoginStatusEnum; +import com.tz.platform.common.core.enmus.UserTypeEnum; import com.tz.platform.common.core.tools.DateUtil; import com.tz.platform.common.core.tools.JWTUtil; +import com.tz.platform.common.core.tools.StrUtil; import com.tz.platform.entity.LoginLog; import com.tz.platform.entity.User; import com.tz.platform.repository.LoginLogDao; @@ -112,4 +115,19 @@ public class ApiUserLoginBiz { loginLogDao.updateLoginOut(userNo); return Result.success("success"); } + + public Result<String> addDefaultAdmin(){ + User user = new User(); + user.setId(1L); + user.setName("管理员"); + user.setUsername("admin"); + user.setGmtCreate(new Date()); + user.setMobileSalt(StrUtil.get32UUID()); + user.setMobilePsw(DigestUtil.sha1Hex(user.getMobileSalt() +SystemUtil.INIT_PASSWORD)); + user.setGmtModified(new Date()); + user.setUserType(UserTypeEnum.ADMIN.getCode()); + userDao.save(user); + return Result.success("success"); + } + } diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/auth/biz/AuthUserInfoBiz.java b/tz/user/user-service/src/main/java/com/tz/platform/user/auth/biz/AuthUserInfoBiz.java index c6f92da..0cc985b 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/auth/biz/AuthUserInfoBiz.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/auth/biz/AuthUserInfoBiz.java @@ -30,9 +30,9 @@ public class AuthUserInfoBiz { } public Result<Boolean> complete(EditUserVO vo){ - if(StringUtils.isEmpty(vo.getEmail())){ - return Result.error("邮箱不能为空"); - } +// if(StringUtils.isEmpty(vo.getEmail())){ +// return Result.error("邮箱不能为空"); +// } if(StringUtils.isEmpty(vo.getMobile())){ return Result.error("手机不能为空"); } diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/chunzhen/IPSeeker.java b/tz/user/user-service/src/main/java/com/tz/platform/user/chunzhen/IPSeeker.java index f26df30..6e8e7ac 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/chunzhen/IPSeeker.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/chunzhen/IPSeeker.java @@ -1,7 +1,12 @@ package com.tz.platform.user.chunzhen; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.io.ClassPathResource; + import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InputStream; import java.io.RandomAccessFile; import java.nio.ByteOrder; import java.nio.MappedByteBuffer; @@ -10,8 +15,9 @@ import java.util.ArrayList; import java.util.Hashtable; import java.util.List; +@Slf4j public class IPSeeker { - private static final String IP_FILE = IPSeeker.class.getResource("/QQWry.DAT").toString().substring(5); + // 一些固定常量,比如记录长度等等 private static final int IP_RECORD_LENGTH = 7; @@ -43,14 +49,17 @@ public class IPSeeker { buf = new byte[100]; b4 = new byte[4]; b3 = new byte[3]; + String IP_FILE = ""; try { - ipFile = new RandomAccessFile(IP_FILE, "r"); + ClassPathResource resource = new ClassPathResource("QQWry.DAT"); + IP_FILE = resource.getPath(); + ipFile = new RandomAccessFile(resource.getFile(), "r"); } catch (FileNotFoundException e) { - System.out.println(IPSeeker.class.getResource("/QQWry.DAT").toString()); - System.out.println(IP_FILE); - System.out.println("IP地址信息文件没有找到,IP显示功能将无法使用"); + log.error("chunzheng file read err:{}",IP_FILE); ipFile = null; + } catch (IOException e) { + e.printStackTrace(); } // 如果打开文件成功,读取文件头信息 if(ipFile != null) { @@ -67,6 +76,14 @@ public class IPSeeker { } } } + private String streamToString(InputStream inputHtml) throws IOException { + StringBuffer out = new StringBuffer(); + byte[] b = new byte[4096]; + for (int n; (n = inputHtml.read(b)) != -1;) { + out.append(new String(b, 0, n)); + } + return out.toString(); + } /** *//** * @return 单一实例 diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/pc/PcUserInfoController.java b/tz/user/user-service/src/main/java/com/tz/platform/user/pc/PcUserInfoController.java index 4ec9f68..41f73b3 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/pc/PcUserInfoController.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/pc/PcUserInfoController.java @@ -46,4 +46,9 @@ public class PcUserInfoController extends BaseController { public Result<Long> addUser(@RequestBody UserVO vo){ return pcUserInfoBiz.saveUser(vo); } + + @PostMapping(value = "addAdmin") + public Result<Long> addAdmin(@RequestBody UserVO vo){ + return pcUserInfoBiz.addAdmin(vo); + } } \ No newline at end of file diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/pc/biz/PcUserInfoBiz.java b/tz/user/user-service/src/main/java/com/tz/platform/user/pc/biz/PcUserInfoBiz.java index 5fa9cc5..6d7226a 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/pc/biz/PcUserInfoBiz.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/pc/biz/PcUserInfoBiz.java @@ -6,6 +6,7 @@ import com.tz.platform.common.core.config.SystemUtil; import com.tz.platform.common.core.enmus.UserTypeEnum; import com.tz.platform.common.core.tools.StrUtil; import com.tz.platform.entity.User; +import com.tz.platform.feign.user.vo.UserVo; import com.tz.platform.repository.UserDao; import com.tz.platform.user.pc.bo.UserPageBO; import com.tz.platform.user.pc.dto.UserDTO; @@ -146,6 +147,38 @@ public class PcUserInfoBiz { return Result.success(user.getId()); } + + public Result<Long> addAdmin(UserVO vo){ + if(StringUtils.isEmpty(vo.getUsername())){ + return Result.error("用户名不能为空"); + } + + User creator = userDao.getById(vo.getUserNo()); + User user =userDao.getById(vo.getId()); + if(vo.getId()== null||user == null){ + user = new User(); + user.setUsername(vo.getUsername()); + user.setGmtCreate(new Date()); + } + if(StringUtils.hasText(vo.getPassword())){ + user.setMobileSalt(StrUtil.get32UUID()); + user.setMobilePsw(DigestUtil.sha1Hex(user.getMobileSalt() +vo.getPassword())); + }else{ + user.setMobileSalt(StrUtil.get32UUID()); + user.setMobilePsw(DigestUtil.sha1Hex(user.getMobileSalt() + SystemUtil.INIT_PASSWORD)); + } + + user.setName(vo.getName()); + user.setMobile(vo.getMobile()); + user.setGmtModified(new Date()); + user.setUserType(UserTypeEnum.ADMIN.getCode()); + if(user.getUserType().equals(UserTypeEnum.ADMIN.getCode())&&creator.getUserType()!=3){ + return Result.error("无权添加用户"); + } + user = userDao.save(user); + return Result.success(user.getId()); + } + public Result<String> deleteUser(UserVO vo){ if(vo.getId()==null){ return Result.error("无该用户信息"); diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/pc/vo/UserVO.java b/tz/user/user-service/src/main/java/com/tz/platform/user/pc/vo/UserVO.java index 64d926f..1e6103e 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/pc/vo/UserVO.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/pc/vo/UserVO.java @@ -8,6 +8,7 @@ public class UserVO { private Long id; private String studentNo; private String password; + private String username; private String name; private String school; private String mobile; diff --git a/tz/user/user-service/src/main/resources/bootstrap.yml b/tz/user/user-service/src/main/resources/bootstrap.yml index 7cc30ee..ddfbd24 100644 --- a/tz/user/user-service/src/main/resources/bootstrap.yml +++ b/tz/user/user-service/src/main/resources/bootstrap.yml @@ -7,7 +7,7 @@ spring: active: dev cloud: nacos: - server-addr: 127.0.0.1:8848 + server-addr: 172.19.255.105:8848 username: nacos password: nacos config: