瀏覽代碼

1、新增实际榜分页接口。2、根据id进入详情接口变成近一个月的数据。3、详情返回数据新增Y坐标函数共前端使用。

jessie 5 年之前
父節點
當前提交
93e4a8fe27

+ 35 - 4
src/main/java/com/pavis/ai/app/fda/common/utils/DateUtils.java

@@ -12,8 +12,8 @@ import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.TemporalAdjusters;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 @Slf4j
@@ -274,13 +274,44 @@ public class DateUtils {
         return res > 0 ? true : false;
     }
 
-    public static  String getMonthByNearly(String date){
+    public static Map<String,Object> getMonthByNearly(String date){
         DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         LocalDate localDate = LocalDate.parse(date, pattern);
         localDate = localDate.minusMonths(1);
         String nearlyMonth = localDate.toString();
+        Map<String,Object> map = new HashMap<>();
+        map.put("month",date);
+        map.put("nearlyMonth",nearlyMonth);
         log.info("最近一个月:{}",nearlyMonth);
-        return nearlyMonth;
+        return map;
+    }
+
+    /**
+     * 计算坐标轴Y
+     * @param floats
+     * @return
+     */
+    public static List<Float> getAxisY(List<Float> floats){
+        // 去重
+        List<Float> distinctFloats = floats.stream()
+                .distinct()
+                .collect(Collectors.toList());
+        // 排序
+        distinctFloats.sort(Comparator.reverseOrder());
+        System.err.println(JSON.toJSONString(distinctFloats));
+        // String result = floats.stream().reduce((first, second) -> second).orElse("no last element");
+        Float firstNum = distinctFloats.stream().findFirst().orElse( 0F );
+        Float lastNum = distinctFloats.stream().reduce((first, second) -> second).orElse(0F);
+        System.err.println(firstNum + " <> " + lastNum);
+        // 求各值间隔。 是否应该除以个数 todo 待讨论。
+        Float num = (firstNum - lastNum) / 10;
+        System.err.println(num);
+        List<Float> finalFloats = new ArrayList<>();
+        for (Float aFloat : distinctFloats) {
+            finalFloats.add(aFloat / 10);
+        }
+        System.err.println(JSON.toJSONString(finalFloats));
+        return finalFloats;
     }
 
 }

+ 12 - 1
src/main/java/com/pavis/ai/app/fda/controller/ListController.java

@@ -92,6 +92,17 @@ public class ListController {
         return ResultBody.ok().data(listService.decLastWeekPred());
     }
 
-
+    @ApiOperation("涨幅---上周实际榜分页")
+    @ApiOperationSupport(order = 7)
+    @GetMapping("/inc/last/page")
+    public ResultBody incLastWeekpage(Long currPage) {
+        // 返回hisInfos
+        // 备注:此id是板块id,不传值。
+        // 去数据库查,该表的结构与hisinfo相同。涨跌幅的值。
+        // 返回结果按照涨--从大到小,取top10.
+        // 跌 -- 从小到大 取top10。
+        // 查close,排序值: 上周周五的close-上上上周五的close >0涨 <0跌
+        return ResultBody.ok().data(listService.incLastWeekActualByPage(currPage));
+    }
 
 }

+ 1 - 0
src/main/java/com/pavis/ai/app/fda/form/his/IndustryDetailsInfo.java

@@ -21,4 +21,5 @@ public class IndustryDetailsInfo {
     private List<NewsList> news;
     private Boolean tag;
     private Boolean isFollowed;
+    private List<Float> axisByY;
 }

+ 2 - 0
src/main/java/com/pavis/ai/app/fda/mapper/IndustryPlateResMapper.java

@@ -20,4 +20,6 @@ import java.util.List;
 public interface IndustryPlateResMapper extends BaseMapper<IndustryPlateRes> {
 
     List<IndustryPlateRes> findPlateByIdOrName(@Param("params") QueryForm params);
+
+    IPage<IndustryPlateRes> selectActualPlateByPage(Page<IndustryPlateRes> page,@Param("params") QueryForm params);
 }

+ 10 - 0
src/main/java/com/pavis/ai/app/fda/service/ListService.java

@@ -1,8 +1,11 @@
 package com.pavis.ai.app.fda.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.pavis.ai.app.fda.form.inc.IncInfo;
+import com.pavis.ai.app.fda.form.sel.QueryForm;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author guanhuijuan
@@ -52,4 +55,11 @@ public interface ListService {
      */
     List<IncInfo> decNextWeekPred();
 
+    /**
+     * 涨幅表-上周实际榜
+     *
+     * @return
+     */
+    Map<String, Object> incLastWeekActualByPage(Long currPage);
+
 }

+ 27 - 8
src/main/java/com/pavis/ai/app/fda/service/impl/HisServiceImpl.java

@@ -91,17 +91,20 @@ public class HisServiceImpl implements HisService {
         String datePlate = getNewestDate(findDetails);
         log.info("实际日期:{}",datePlate);
         // 2、根据行业id、日期在近7天的,实际榜数据。
-        Map<String, Object> weekMap = DateUtils.getEverydayByActual(datePlate);
-        String monday = weekMap.get("MONDAY").toString();
-        String sunday = weekMap.get("SUNDAY").toString();
+        // Map<String, Object> weekMap = DateUtils.getEverydayByActual(datePlate);
+        // String monday = weekMap.get("MONDAY").toString();
+        // String sunday = weekMap.get("SUNDAY").toString();
+        Map<String, Object> weekMap = DateUtils.getMonthByNearly(datePlate);
+        String month = weekMap.get("month").toString();
+        String nearlyMonth = weekMap.get("nearlyMonth").toString();
         // 实际数据。
         List<IndustryPlate> actualPlates = new ArrayList<>();
-        if (DateUtils.checkDate(monday, sunday).equals(true)) {
+        if (DateUtils.checkDate(month, nearlyMonth).equals(true)) {
             actualPlates = toActualPlates(findDetails.get(0).getPlateId(),
-                    sunday,monday);
+                    nearlyMonth,month);
         }else {
             actualPlates = toActualPlates(findDetails.get(0).getPlateId(),
-                    monday,sunday);
+                    month,nearlyMonth);
         }
         log.info("实际:{}", JSON.toJSONString(actualPlates));
 
@@ -123,18 +126,30 @@ public class HisServiceImpl implements HisService {
         }
         // 3、构造实际数据返回。
         List<IndustryDetail> industryDetails = new ArrayList<>();
+        List<Float> floats = new ArrayList<>();
         if (nextPlates.size() > 0 && isDetailed.equals(true)) {
             // 创建detail列表
             log.info("实际:{}", JSON.toJSONString(actualPlates));
             for (IndustryPlate industryPlate : actualPlates) {
-                industryDetails.add(toIndustryDetail(industryPlate));
+                // 如果是周六周日则不展示。
+                String week = DateUtils.getWeekNameByDate(industryPlate.getPlateDate());
+                if (!week.equals("6") && !week.equals("7")){
+                    industryDetails.add(toIndustryDetail(industryPlate));
+                    floats.add(industryPlate.getPlateClose());
+                    floats.add(industryPlate.getPlateClosePred());
+                }
             }
         }
         if (isDetailed.equals(false)) {
             // 创建detail列表
             log.info("实际:{}", JSON.toJSONString(actualPlates));
             for (IndustryPlate industryPlate : actualPlates) {
-                industryDetails.add(toIndustryDetail(industryPlate));
+                String week = DateUtils.getWeekNameByDate(industryPlate.getPlateDate());
+                if (!week.equals("6") && !week.equals("7")){
+                    industryDetails.add(toIndustryDetail(industryPlate));
+                    floats.add(industryPlate.getPlateClose());
+                    floats.add(industryPlate.getPlateClosePred());
+                }
             }
         }
         // 3.1 新闻列表,根据行业id查询
@@ -144,11 +159,13 @@ public class HisServiceImpl implements HisService {
         List<NewsList> newsLists = newsService.getNewsByPlateId(searchInfo.getSearchParam());
         List<FollowInfo> followInfos = getFollowed(findDetails.get(0).getUserId(), findDetails.get(0).getPlateId());
         Boolean isFollowed = followInfos.size() > 0 ? true : false;
+        List<Float> axisByY = DateUtils.getAxisY(floats);
         IndustryDetailsInfo industryInfo = IndustryDetailsInfo.builder()
                 .actuals(industryDetails)
                 .news(newsLists)
                 .tag(true)
                 .isFollowed(isFollowed)
+                .axisByY(axisByY)
                 .build();
         return industryInfo;
     }
@@ -336,6 +353,8 @@ public class HisServiceImpl implements HisService {
                 .news(new ArrayList<>())
                 // todo 此处是涨还是跌???????????????
                 .tag(true)
+                // todo 0723 是否需要增加。
+
                 .build();
         return industryInfo;
     }

+ 60 - 2
src/main/java/com/pavis/ai/app/fda/service/impl/ListServiceImpl.java

@@ -2,9 +2,13 @@ package com.pavis.ai.app.fda.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.pavis.ai.app.fda.common.utils.GeneralUtils;
 import com.pavis.ai.app.fda.form.inc.IncInfo;
+import com.pavis.ai.app.fda.form.sel.QueryForm;
 import com.pavis.ai.app.fda.mapper.IndustryPlateResMapper;
+import com.pavis.ai.app.fda.model.IndustryPlate;
 import com.pavis.ai.app.fda.model.IndustryPlateRes;
 import com.pavis.ai.app.fda.service.ListService;
 import lombok.extern.slf4j.Slf4j;
@@ -12,7 +16,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -89,6 +95,52 @@ public class ListServiceImpl implements ListService {
         return toNextPred(false);
     }
 
+    @Override
+    public Map<String, Object> incLastWeekActualByPage(Long currPage) {
+        Boolean incOrDec = true;
+        // 1、获取实际榜数据。
+        List<IndustryPlateRes> plates = new ArrayList<>();
+        IPage<IndustryPlateRes> plateIPage = null;
+        Page<IndustryPlateRes> page = new Page<>();
+        page.setCurrent(0L);
+        page.setSize(currPage);
+        QueryForm queryForm = QueryForm.builder()
+                // .plateId("0.0")
+                .plateName("0.0")
+                .build();
+        plateIPage = industryPlateResMapper.selectActualPlateByPage(page,queryForm);
+        if (incOrDec.equals(true)){
+            // 涨幅
+            // plates = toActualByLastWeek(incOrDec,"plate_close_up_percent");
+            // 2、封装返回数据。
+            List<IncInfo> incInfos = toBackActualInfos(plateIPage.getRecords());
+            List<IncInfo> finalIncInfos = incInfos.stream().filter(s -> s.getIndustryValue() > 0.0F)
+                    .collect(Collectors.toList());
+            System.err.println(finalIncInfos.size());
+            IPage<IncInfo> incInfoIPage = new Page<>();
+            System.err.println(JSON.toJSONString(plateIPage));
+            incInfoIPage.setCurrent(plateIPage.getCurrent());
+            incInfoIPage.setSize(plateIPage.getSize());
+            incInfoIPage.setPages(plateIPage.getPages());
+            incInfoIPage.setTotal(plateIPage.getTotal());
+            incInfoIPage.setRecords(finalIncInfos);
+            Map<String,Object> pageMap = new HashMap<>();
+            pageMap.put("current",plateIPage.getCurrent());
+            pageMap.put("size",plateIPage.getSize());
+            pageMap.put("pages",plateIPage.getPages());
+            pageMap.put("total",plateIPage.getTotal());
+            pageMap.put("incInfos",finalIncInfos);
+            return pageMap;
+        }else {
+            plates = toActualByLastWeek(incOrDec,"plate_close_up_percent");
+            // 2、封装返回数据。
+            List<IncInfo> incInfos = toBackActualInfos(plates);
+            List<IncInfo> finalIncInfos = incInfos.stream().filter(s -> s.getIndustryValue() < 0.0F)
+                    .collect(Collectors.toList());
+            return null;
+        }
+    }
+
 
     /**
      * 上周实际榜。
@@ -152,13 +204,19 @@ public class ListServiceImpl implements ListService {
      * @return
      */
     public List<IncInfo> toBackActualInfos(List<IndustryPlateRes> plates) {
+        System.err.println("siz>"+plates.size());
         // 3、返回数据创建。
         IncInfo incInfo;
         List<IncInfo> incInfos = new ArrayList<>();
         for (IndustryPlateRes industryPlateRes : plates) {
-            Float actualVal = null != industryPlateRes.getPlateCloseUpPercent() ?
-                    industryPlateRes.getPlateCloseUpPercent() : 0.0F;
+            Float percent = industryPlateRes.getPlateCloseUpPercent();
+            System.err.println(percent);
+            System.err.println(null != percent);
+            Float actualVal = null != percent ?
+                    percent : 0.0F;
             Boolean industryTag = actualVal > 0.0F ? true : false;
+            System.err.println(actualVal);
+            System.out.println(GeneralUtils.toFloatByTwo(actualVal));
             incInfo = IncInfo.builder()
                     .industryId(industryPlateRes.getPlateId())
                     .industryName(industryPlateRes.getPlateName())

+ 26 - 0
src/main/resources/mapper/IndustryPlateResMapper.xml

@@ -17,4 +17,30 @@
         </where>
         group by ipr.plate_id order by ipr.plate_date desc
     </select>
+
+    <select id="selectActualPlateByPage"  resultType="IndustryPlateRes" parameterType="map">
+        select ipr.*
+        from industry_plate_res ipr
+        <where>
+            <if test="params.plateId != null and '' != params.plateId">
+                ipr.plate_close_up_percent &gt; #{params.plateId}
+            </if>
+            <if test="params.plateName != null and '' != params.plateName">
+                ipr.plate_close_up_percent &lt; #{params.plateName}
+            </if>
+
+        </where>
+<!--        <where>-->
+<!--            <if test="params.lastFriday != null and '' != params.lastFriday and params.friday != null and '' != params.friday">-->
+<!--                and ipr.plate_date between #{params.friday} and #{params.lastFriday}-->
+<!--            </if>-->
+<!--            <if test="params.plateId != null and params.plateId != ''">-->
+<!--                or ipr.plate_id like CONCAT(CONCAT('%', #{params.plateId}), '%')-->
+<!--            </if>-->
+<!--            <if test="params.plateName != null and params.plateName != ''">-->
+<!--                or ipr.plate_name like CONCAT(CONCAT('%', #{params.plateName}), '%')-->
+<!--            </if>-->
+<!--        </where>-->
+        group by ipr.plate_id order by ipr.plate_date desc,ipr.plate_close_up_percent desc
+    </select>
 </mapper>

+ 35 - 0
src/test/java/com/pavis/ai/app/fda/LocalDateTest.java

@@ -54,6 +54,41 @@ public class LocalDateTest {
         System.out.println(DateUtils.getMonthByNearly("2020-06-30"));
     }
 
+    @Test
+    public void testMon(){
+        String date = "2020-06-30";
+        Map<String,Object> map = DateUtils.getMonthByNearly(date);
+        String month = map.get("month").toString();
+        String nearlyMonth = map.get("nearlyMonth").toString();
+        System.err.println(month+"<>"+nearlyMonth);
+        Boolean tag = DateUtils.checkDate(month, nearlyMonth);
+        if (tag.equals(true)){
+            System.err.println(nearlyMonth+"<>"+month);
+        }else {
+            System.err.println(month+"<>"+nearlyMonth);
+        }
+        System.err.println(tag);
+        String testDate = "2020-05-31";
+        String week = DateUtils.getWeekNameByDate(testDate);
+        if (!week.equals("6") &&
+                !week.equals("7")){
+            System.err.println("add");
+        }else {
+            System.err.println("del");
+        }
+    }
+
+    @Test
+    public void testY(){
+        List<Float> floats = new ArrayList<>();
+        floats.add(70.34F);
+        floats.add(28.954F);
+        floats.add(55.90F);
+        floats.add(55.90F);
+        floats.add(89.123F);
+        System.err.println(DateUtils.getAxisY(floats));
+    }
+
     // 1、实际榜:
     // 2、预测帮:查找close为空的。
     // 3、date上周 上上周测试。